Spring Security简单实践

2月 1, 2016 |

demo下载:test_security.zip

网上讲这个主题的帖子很多,而且《spring in action》和《spring security reference》的Security Namespace Configuration节有详细的介绍。本文就提供一个基于maven的demo工程供大家快速起步好了。

本demo有两个请求路径
http://localhost:8080/test_security/admin/test2.do
http://localhost:8080/test_security/test1.do
添加了如下的用户信息
username ? 授权
--------------------------------------------------------
root ? ? ? ? ? ?ROLE_ADMIN,ROLE_COMMON
rex ? ? ? ? ? ? ?ROLE_ADMIN
hml ? ? ? ? ? ?ROLE_COMMON

有如下的权限映射信息:

所以root能访问这两个url,而rex能访问第一个,hml能访问第二个,具体参考applicationContext.xml文件的配置

注意点如下:
1、如果<security:http>元素的use-expressions='true',那么不能在<security:intercept-url>元素的access属性值中使用IS_AUTHENTICATED_ANONYMOUSLY等系统常量,只能使用access="isAnonymous()"这样的表达式。当<security:http use-expressions="true"> 激活SpEL表达式的时候,不支持使用角色名。
不然会抛出如下异常
java.lang.IllegalArgumentException: Failed to evaluate expression 'IS_AUTHENTICATED_ANONYMOUSLY'

2、当自定义登陆view的时候,要将login.jsp排查在spring security的验证范围,不然就没法登陆了。
3、如果启用了csrf机制,那么login.jsp页面要如下配置
<security:intercept-url pattern="/login.jsp" access="isAnonymous()" />
不能
<security:http pattern="/login.jsp" security="none"/>,不然我们没有办法获取csrf信息。

4、需要在login.jsp页面添加关于csrf的隐藏域
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

5、对于spring-security 4.0.3,不再支持spring-security-3.0.xsd,只支持全新的spring-security-4.0.xsd。

Posted in: spring practise

Comments are closed.