Spring Security 注解备忘

简要

Spring Security是基于spring的应用程序提供声明式安全保护的安全性框架,它提供了完整的安全性解决方案,能够在web请求级别和方法调用级别
处理身份证验证和授权.它充分使用了依赖注入和面向切面的技术,Spring security主要是从两个方面解决安全性问题:
1.web请求级别:使用servlet过滤器保护web请求并限制URL级别的访问
2.方法调用级别:使用Spring AOP保护方法调用,确保具有适当权限的用户采用访问安全保护的方法.

Web请求级别的保护

  对于请求级别的安全性来说,主要时通过保护一个或多个URL,使得只有特定的用户才能访问,并其他用户访问该URL的内容.本文主要是基于spring mvc下整合Spring security模块

方法调用级别

spring security的方法级别的保护是基于Spring AOP技术。首先需要在spring配置文件中加以下配置,才能使spring Security保护那些使用相关注解的方法。
spring Security支持4种方法级别安全性的方法:
1.使用@Secured注解方法,这是spring自带的注解方法。@Secured("")内部的字符串不具有SpEL特性,只能是具体的权限。
2.使用@JSR-250 @RelosAllowed注解的方法。作用和使用方法与@Secured一样,不同在于它不是spring框架的,所以可以做到和spring框架的解耦。
3.使用Spring 方法调用前和调用后注解方法。这些方法支持SpEL.
4.匹配一个或多个明确声明的切点方法。

@Secured和 @RelosAllowed

@Secured("ROLE_ADMIN")
public void addUser(User user){
    ...  
}
@RolesAllowed("ROLE_ADMIN")
public void updateUser(User user){
    ...  
}

使用Spring 方法调用前和调用后注解方法

可以使用SpEL方法有四种:

  1. @PreAuthorize: 在方法调用前,基于表达式计算结果来限制方法访问
  2. @PostAuthorize: 允许方法调用,但是如果表达式结果为fasle则抛出异常
  3. @PostFilter :允许方法调用,但必须按表达式过滤方法结果
  4. @PreFilter:允许方法调用,但必须在进入方法前过滤输入值
@PreAuthorize("hasRole('ROLE_ADMIN')")
public void addUser(User user){
   //如果具有权限 ROLE_ADMIN 访问该方法
    ....
}

//returnObject可以获取返回对象user,判断user属性username是否和访问该方法的用户对象的用户名一样。不一样则抛出异常。
@PostAuthorize("returnObject.user.username==principal.username")
public User getUser(int userId){
   //允许进入
...
    return user;    
}

//将结果过滤,即选出性别为男的用户
@PostFilter("returnObject.user.sex=='男' ")
public List<User> getUserList(){
   //允许进入
...
    return user;    
}

Spring Security 支持的所有SpEL表达式

安全表达式 计算结果
authentication  用户认证对象
denyAll  结果始终为false
hasAnyRole(list of roles)  如果用户被授权指定的任意权限,结果为true
hasRole(role)如果用户被授予了指定的权限,结果 为true
hasIpAddress(IP Adress)用户地址
isAnonymous()  是否为匿名用户
isAuthenticated()  不是匿名用户
isFullyAuthenticated  不是匿名也不是remember-me认证
isRemberMe()  remember-me认证
permitAll始终true
principal用户主要信息对象





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值