-
Notifications
You must be signed in to change notification settings - Fork 6.3k
Exposing Beans for defaultMethodExpressionHandler can prevent Method Security #4020
Description
Updated Summary
If a @Configuration provides a @Bean that is used to default GlobalMethodSecurityConfiguration's defaultMethodExpressionHandlers defaultMethodExpressionHandler it will prevent any @Bean that is @Autowired into the same @Configuration from having method security enabled. For example:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig {
// any one of the following @Bean will prevent DenyAllService from being
// secured since DenyAllService is also Autowired into this same Configuration
@Bean
PermissionEvaluator permissionEvaluator() {
return mock(PermissionEvaluator.class);
}
@Bean
RoleHierarchy RoleHierarchy() {
return mock(RoleHierarchy.class);
}
@Bean
AuthenticationTrustResolver trustResolver() {
return mock(AuthenticationTrustResolver.class);
}
@Autowired
DenyAllService denyAll;
}
@Configuration
public class ServiceConfig {
@Bean
DenyAllService denyAllService() {
return new DenyAllService();
}
}
@PreAuthorize("denyAll")
public class DenyAllService {
void denyAll() {
}
}Summary
spring-data-rest @PreAuthorize annotated methods on a @RepositoryRestResource annotated PagingAndSortingRepository interface fail to be evaluated on invocation if the resulting repository bean instance is @Autowired into a @Configuration annotated class.
Actual Behavior
See this project for a runnable example:
https://github.com/bitsofinfo/spring-boot-pre-authorize-issue-01
Expected Behavior
@PreAuthorize expressions should be evaluated on requests that hit the repository
Configuration
See this project for a runnable example:
https://github.com/bitsofinfo/spring-boot-pre-authorize-issue-01
Version
All latest spring-boot components
See this project for a runnable example:
https://github.com/bitsofinfo/spring-boot-pre-authorize-issue-01
Sample
https://github.com/bitsofinfo/spring-boot-pre-authorize-issue-01