What if you could lock your app's doors with just a simple tag on your code?
Why @Secured annotation in Spring Boot? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine building a web app where you must check user roles manually before allowing access to each page or function.
You write many if-else checks scattered everywhere in your code.
Manually checking roles everywhere makes your code messy and hard to maintain.
It's easy to forget a check, causing security holes.
Changing roles means hunting through all your code to update conditions.
The @Secured annotation lets you declare access rules right on methods or classes.
Spring Security automatically enforces these rules, keeping your code clean and secure.
if(user.hasRole("ADMIN")) { performAdminTask(); } else { denyAccess(); }
@Secured("ROLE_ADMIN")
public void performAdminTask() { ... }You can easily protect parts of your app by simply adding annotations, making security clear and centralized.
In an online store, only users with the ADMIN role can add or remove products, enforced by @Secured on those methods.
Manual role checks clutter code and risk mistakes.
@Secured centralizes security rules on methods or classes.
It makes your app safer and easier to maintain.
Practice
What is the main purpose of the @Secured annotation in Spring Boot?
Solution
Step 1: Understand the role of
The@Secured@Securedannotation is used to limit method access to users with specific roles.Step 2: Compare with other options
Other options relate to different Spring features like database or HTTP handling, not security roles.Final Answer:
To restrict access to methods based on user roles -> Option AQuick Check:
@Securedcontrols method access by roles [OK]
- Confusing @Secured with @RequestMapping
- Thinking @Secured configures database
- Assuming @Secured manages app properties
Which of the following is the correct way to use @Secured to allow only users with role ADMIN to access a method?
@Secured({"?"})
public void adminMethod() { }Solution
Step 1: Recall role naming convention
Spring Security requires roles to be prefixed withROLE_, soROLE_ADMINis correct.Step 2: Check other options
ADMINwithout prefix is invalid;ROLE-ADMINuses wrong separator;ROLE_ADMINISTRATORis a different role.Final Answer:
ROLE_ADMIN -> Option AQuick Check:
Roles needROLE_prefix [OK]
- Omitting ROLE_ prefix
- Using dash (-) instead of underscore (_)
- Using wrong role names
Given this method secured with @Secured({"ROLE_USER", "ROLE_ADMIN"}), what happens if a user with role ROLE_GUEST calls it?
@Secured({"ROLE_USER", "ROLE_ADMIN"})
public String getData() {
return "Secret Data";
}Solution
Step 1: Understand role checking with @Secured
The annotation allows only users with rolesROLE_USERorROLE_ADMIN.Step 2: Check user role
User hasROLE_GUEST, which is not allowed, so access is denied.Final Answer:
Access denied error is thrown -> Option DQuick Check:
User role mismatch causes denial [OK]
- Assuming method runs for any role
- Thinking method returns null on denial
- Confusing role names
Identify the error in this usage of @Secured:
@Secured("ROLE_ADMIN")
public void adminTask() { }Solution
Step 1: Check @Secured syntax
@Securedexpects an array of roles, so roles must be inside curly braces{}.Step 2: Analyze given code
Here, roles are given as a single string without braces, causing syntax error.Final Answer:
Missing curly braces around roles array -> Option BQuick Check:
@Secured requires roles in braces [OK]
- Omitting braces for single role
- Removing ROLE_ prefix
- Confusing @Secured with @RolesAllowed
You want to secure two methods: one accessible only by ROLE_ADMIN, and another accessible by either ROLE_USER or ROLE_MANAGER. Which is the correct way to annotate these methods?
Method 1:
@Secured({"?"})
public void adminOnly() { }
Method 2:
@Secured({"?"})
public void userOrManager() { }Solution
Step 1: Secure Method 1 for ROLE_ADMIN only
Use@Secured({"ROLE_ADMIN"})to restrict access to admins.Step 2: Secure Method 2 for ROLE_USER or ROLE_MANAGER
Use@Secured({"ROLE_USER", "ROLE_MANAGER"})to allow either role.Final Answer:
{"ROLE_ADMIN"} and {"ROLE_USER", "ROLE_MANAGER"} -> Option CQuick Check:
Use arrays with ROLE_ prefix for multiple roles [OK]
- Omitting ROLE_ prefix
- Using pipe '|' inside role strings
- Mixing roles in one annotation incorrectly
