Spring Security 注解备忘

来源:互联网 发布:安装linux u盘坏了 编辑:程序博客网 时间:2024/05/16 18:03

简要

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  结果始终为falsehasAnyRole(list of roles)  如果用户被授权指定的任意权限,结果为truehasRole(role)如果用户被授予了指定的权限,结果 为truehasIpAddress(IP Adress)用户地址isAnonymous()  是否为匿名用户isAuthenticated()  不是匿名用户isFullyAuthenticated  不是匿名也不是remember-me认证isRemberMe()  remember-me认证permitAll始终trueprincipal用户主要信息对象




阅读全文
0 0
原创粉丝点击