Spring Security 小记 - @Secured(), @PreAuthorize() 及 @RolesAllowed()

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_前缀
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值