本文主要是介绍Spring Security 小记 - @Secured(), @PreAuthorize() 及 @RolesAllowed(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- Spring Security 小记
- 前言
- 权限注解
- 小坑
Spring Security 小记
记录一下Spring Security(版本为4) 中的 @Secured(), @PreAuthorize() 及 @RolesAllowed()
前言
Spring Security 和Shiro 可以说是安全框架的唯二选择了。 Shiro,比较简单和灵活,简单够用。而Spring Security的功能和shiro都差不多,复杂一点,权限细粒度更高。但是因为SpringBoot,还是很值得尝试的。 Spring 全家桶 , 一用便知道。
权限注解
通常采用@Secured ,@PreAuthorize和@RolesAllowed 来对方法进行权限控制。
使用这些注解,先要配置@EnableGlobalMethodSecurity(securedEnabled = true)
这里看一下官网的例子
public interface BankService {@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account readAccount(Long id);@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
public Account[] findAccounts();@Secured("ROLE_TELLER")
public Account post(Account account, double amount);
}
@Secured和@PreAuthorize用法基本一样,但是里面有个大坑。
@RolesAllowed 是JSR250定义的注解
配置方式不一样:@EnableGlobalMethodSecurity(jsr250Enabled=true)
JSR250注解还有 @DenyAll 和 @PermitAll 。
小坑
之前运行同事的代码,发现权限控制失效。区别在于使用@Secured,而@Secured对应的角色必须要有ROLE_前缀。
通常在项目里面会实现UserDetails写user类,关键在于getAuthoritie()方法里面生成的role有没有前缀ROLE_。
使用@PreAuthorize是可以随意设置的
@PreAuthorize("hasAuthority('ADMIN')")和@PreAuthorize("hasAuthority('ROLE_ADMIN')") // 都可以,只要和实现的getAuthoritie里面的role对上
就可以@Secured({"ADMIN"})和@Secured({"ROLE_ADMIN"}) // 实现的getAuthoritie里面的role都必须要有ROLE_前缀
这篇关于Spring Security 小记 - @Secured(), @PreAuthorize() 及 @RolesAllowed()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!