Hint: Use @PreAuthorize to check roles on methods [OK]
Common Mistakes:
Using @RequestMapping for access control
Confusing @Autowired with security annotations
Mistaking @Entity for access control
3. Given the method annotation @PreAuthorize("hasRole('ADMIN')"), what will happen if a user with role USER tries to access this method?
medium
A. Access is granted because USER is a valid role
B. Method throws a syntax error
C. Access is denied because the user lacks ADMIN role
D. Access is granted only if the user is authenticated
Solution
Step 1: Understand the @PreAuthorize expression
The expression requires the user to have the ADMIN role to access the method.
Step 2: Check user role against requirement
A user with only USER role does not meet the ADMIN role requirement, so access is denied.
Final Answer:
Access is denied because the user lacks ADMIN role -> Option C
Quick Check:
Role check fails without ADMIN role = B [OK]
Hint: User must have exact role in @PreAuthorize to access [OK]
Common Mistakes:
Assuming any authenticated user can access
Thinking USER role is enough for ADMIN-only methods
Confusing syntax error with access denial
4. Consider this method in a Spring Boot controller:
@PreAuthorize("hasRole('ADMIN')")
public String adminPage() {
return "Welcome Admin";
}
What is the likely cause if users with ADMIN role still get access denied errors?
medium
A. The method must be static to work with @PreAuthorize
B. The role prefix 'ROLE_' is missing in the role check
C. The return type should be ResponseEntity<String>
D. The method should be annotated with @GetMapping instead
Solution
Step 1: Understand Spring Security role prefix
Spring Security by default adds 'ROLE_' prefix to roles internally.
Step 2: Check role naming in @PreAuthorize
Using hasRole('ADMIN') expects the granted authority to be 'ROLE_ADMIN'. If roles lack this prefix, access is denied.
Final Answer:
The role prefix 'ROLE_' is missing in the role check -> Option B
Quick Check:
Missing 'ROLE_' prefix causes access denial = D [OK]
Hint: Remember Spring Security adds 'ROLE_' prefix by default [OK]
Common Mistakes:
Thinking @GetMapping affects access control
Believing return type affects security
Assuming method must be static for @PreAuthorize
5. You want to restrict access to a service method so that only users with either ADMIN or MANAGER roles can call it. Which @PreAuthorize expression correctly enforces this?
hard
A. @PreAuthorize("hasRole('ADMIN,MANAGER')")
B. @PreAuthorize("hasRole('ADMIN', 'MANAGER')")
C. @PreAuthorize("hasRole('ADMIN') and hasRole('MANAGER')")
D. @PreAuthorize("hasAnyRole('ADMIN', 'MANAGER')")
Solution
Step 1: Understand role checks for multiple roles
To allow access if user has either ADMIN or MANAGER, use hasAnyRole('ADMIN', 'MANAGER').
Step 2: Analyze each option
@PreAuthorize("hasRole('ADMIN') and hasRole('MANAGER')") requires both roles (AND), which is too strict. @PreAuthorize("hasRole('ADMIN', 'MANAGER')") is invalid as hasRole accepts only one role. @PreAuthorize("hasAnyRole('ADMIN', 'MANAGER')") uses hasAnyRole which is concise and correct. @PreAuthorize("hasRole('ADMIN,MANAGER')") is invalid syntax.
Final Answer:
@PreAuthorize("hasAnyRole('ADMIN', 'MANAGER')") -> Option D
Quick Check:
Use hasAnyRole for multiple allowed roles = A [OK]
Hint: Use hasAnyRole for OR conditions on roles [OK]