除了保护 Web 应用安全外,Spring Security 该提供了将访问规则应用于 Java 方法执行的支持。对于 Spring Security,这只是 “保护资源” 的另一种类型。对于用户而言,这意味着使用相同格式的 ConfigAttribute
字符串(例如角色或表达式)声明式访问规则,但在代码中的不同位置。第一步是启用方法安全性,例如在应用的顶级配置中:
@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SampleSecureApplication {
}
然后我们可以直接修饰方法资源,例如:
@Service
public class MyService {
@Secured("ROLE_USER")
public String secure() {
return "Hello Security";
}
}
该示例是一种使用安全方法的服务。如果 Spring 创建了这种类型的 @Bean
,那么它将被代理,并且在实际执行该方法之前,调用者将必须通过安全拦截器。如果访问被拒绝,则调用者将获得 AccessDeniedException
而不是实际的方法结果。
方法上还可以使用其他注解来强制执行安全性约束,特别是 @PreAuthorize
和 @PostAuthorize
,它们可以使你编写分别包含对方法参数和返回值的引用的表达式。
结合使用 Web 安全性和方法安全性并不少见。筛选器链提供了用户体验功能,例如身份验证和重定向到登录页面等,并且方法安全性在更精细的级别上提供了保护。