spring security3.x学习(21)_关于方法过滤
来源:互联网 发布:在淘宝网上怎么买彩票 编辑:程序博客网 时间:2024/05/17 04:07
@RolesAllowed("ROLE_USER")
public void changePassword(String username, String password);
或
@RolesAllowed({"ROLE_USER","ROLE_ADMIN"})
public void changePassword(String username, String password);
public void changePassword(String username, String password);
"正如我们可能推断出的那样,@RolesAllowed注解并不支持SpEL 表达式。"
“
JSR-250还有两个其它的注解:@PermitAll 和@DenyAll。它们的功能正如你所预想的,允许和禁止对方法的任何请求。
”
在看一下@Secured注解实现方法安全:
<global-method-security secured-annotations="enabled"/>
“
因为@Secured与JSR标准的@RolesAllowed注解在功能上一致,所以并没有充分的理由在新代码中使用它,但是它能够在Spring的遗留代码中运行
”
还有一种,AOP技术:
“
实现方法安全的最后一项技术也可能是最强大的方法,它还有一个好处是不需要修改源代码。作为替代,它使用面向方面的编程方式为一个方法或方法集合声明切点(pointcut),而增强(advice)会在切点匹配的情况下进行基于角色的安全检查。AOP的声明只在Spring Security的XML配置文件中并不涉及任何的注解。
”
<global-method-security>
<protect-pointcut access="ROLE_ADMIN" expression="execution(* com.packtpub.springsecurity.service.IUserService.*(..))"/> <protect-pointcut access="ROLE_ADMIN" expression="execution(* com.packtpub.springsecurity.service.I*Service.*(..))"/>
</global-method-security>
比较方法授权的类型:
以下这段话值得注意:
“
强烈建议在接口上声明AOP规则(以及其它的安全注解),而不是在实现类上。使用类(通过Spring的CGLIB代理)进行声明可能会导致应用出现不可预知的行为改变,通常在正确性方面比不上在接口定义安全声明(通过AOP)。
”
spring security还提供了一种方式:
xmlns:security="http://www.springframework.org/schema/security"(声明)
<security:intercept-methods>
<security:protect access="ROLE_USER" method="changePassword"/>
</security:intercept-methods>
</bean>
这种方式可以在配置文件上直接指定哪个方法需要哪个属性,不过书中这样描述它:
“
尽管阅读起来很容易,但是这种方式的方法安全声明在表现性上不如切点,在功能上不如我们已经见过的注解方式。但是,对于一定类型的工程,使用XML声明的方式足以满足你的需求。
”
可以使用简单的通配符来注明方法名,如,我们可以用如下的方式保护给定bean里所有的set方法:
<security:intercept-methods>
<security:protect access="ROLE_USER" method="set*"/>
</security:intercept-methods>
<security:protect access="ROLE_USER" method="set*"/>
</security:intercept-methods>
“
方法名匹配可以包含前面或后面的正则表达式匹配符(*)。这个符号的存在意味着要对方法名进行通配符匹配,为所有匹配该正则表达式的方法添加拦截器。注意,其它常用的正则表达式操作符(如?或[)并不支持。请查阅相关的Java 文档以理解基本的正则表达式。更复杂的通配符匹配或正则匹配并不支持。
”
@PreAuthorize("#username == principal.username and hasRole('ROLE_USER')")
public void changePassword(String username, String password);
public void changePassword(String username, String password);
“Spring Security方法注解所绑定的SpEL支持更复杂的表达式,包括含有方法参数的表达式。”
0 0
- spring security3.x学习(21)_关于方法过滤
- spring security3.x学习(21)_关于方法过滤
- spring security3.x学习(22)_关于ip的过滤器
- spring security3.x学习(22)_关于ip的过滤器
- spring security3.x学习(11)_退出
- spring security3.x学习(11)_退出
- spring security3.x学习(1)_必备资料&开始学习
- spring security3.x学习(4)_认证管理的过程
- spring security3.x学习(5)_如何拦截用户请求
- spring security3.x学习(7)_访问决策管理
- spring security3.x学习(10)_自定义的登录页面
- spring security3.x学习(15)_扩展JdbcDaoImpl。
- spring security3.x学习(3)_初探过滤器机制
- spring security3.x学习(4)_认证管理的过程
- spring security3.x学习(5)_如何拦截用户请求
- spring security3.x学习(7)_访问决策管理
- spring security3.x学习(10)_自定义的登录页面
- spring security3.x学习(15)_扩展JdbcDaoImpl。
- 第十七周项目四—日期结构体
- struts.xml配置文件
- JAVA邮件发送的简单实现
- 第17周项目4-日期结构体之日期之差
- Bullet(Cocos2dx)之Hello World(vs2012)
- spring security3.x学习(21)_关于方法过滤
- Metasploit常用方法以及名词解释
- Java集合框架中的接口和实现类
- 简单原始JS实现信息提示及隐藏
- 变-颓势下的凤凰涅槃-发表于程序杂志第12期
- buildroot2014.08交叉编译器的配置
- Visual Studio配置MySql数据库
- C++ 结构体嵌套、空结构体和空类
- 信息熵的直观理解