最近项目中要使用到spring-security,闲来没事就研究了下。发现入门挺简单的,在这里把自己的心得发下,希望对没有接触过想接触的朋友有帮助。 

1、在spring-security官网下载最新jar然后拷贝jar到项目的lib下。 
2、在classpath下添加security配置文件,例如applicationContext-security.xml.网上现在大多都是2.0的schema. 要根据自己使用的版本而定.下面是3.0的schema. 

Xml代码  

1. <?xml version="1.0" encoding="UTF-8"?>
2. <beans:beans xmlns="http://www.springframework.org/schema/security"
3. xmlns:beans="http://www.springframework.org/schema/beans"
4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5. xsi:schemaLocation="http://www.springframework.org/schema/beans  
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
7    http://www.springframework.org/schema/security  
8. >
9.   
10. </beans:beans>



3、然后在web.xml中添加配置,内容如下: 

1. <!-- spring security  -->
2. <context-param>
3. <param-name>contextConfigLocation</param-name>
4. <param-value>
5.             classpath*:/applicationContext*.xml  
6. </param-value>
7. </context-param>
8.   
9. <filter>
10. <filter-name>springSecurityFilterChain</filter-name>
11. <filter-class>
12.             org.springframework.web.filter.DelegatingFilterProxy  
13. </filter-class>
14. </filter>
15. <filter-mapping>
16. <filter-name>springSecurityFilterChain</filter-name>
17. <url-pattern>/*</url-pattern>
18. </filter-mapping>
19. <listener>
20. <listener-class>
21.             org.springframework.web.context.ContextLoaderListener  
22. </listener-class>
23. </listener>


配置起来很简单,由于我的security是整合到现有项目中的.一些jar可能已经存在. 单独做demo的朋友配置的时候可能会出现问题. 



本想分开发挣点积分..但怕大家看起来累.. 就发到一起吧.. (*^__^*) 



使用篇 



1、建立login.jsp页面.内容如下: 


Html代码  

1. <form action="<%=path %>/j_spring_security_check" method="post">
2. <input type="text" name="j_username" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}" /><br/>
3. <input type="password" name="j_password" value="" /><br/>
4. <input type="checkbox" name="_spring_security_remember_me" />两周之内不必登陆<br/>
5. <input type="submit">
6. </form>




j_spring_security_check : 为security验证中心(不知道怎么说合适.暂时这么理解吧..). 


j_username: 验证用户名;  

j_password: 验证密码;  

${sessionScope['SPRING_SECURITY_LAST_USERNAME']}:使用最后一次登录用户名.  

_spring_security_remember_me:记住我...


2、xml配置,配置内容如下: 


Xml代码  

 
   
 
1. <?xml version="1.0" encoding="UTF-8"?>
2. <beans:beans xmlns="http://www.springframework.org/schema/security"
3. xmlns:beans="http://www.springframework.org/schema/beans"
4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5. xsi:schemaLocation="http://www.springframework.org/schema/beans  
6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
7.     http://www.springframework.org/schema/security  
8. >
9.   
10. auto-config = true
11.         access-denied-page:出错后跳转到的错误页面;  
12. >
13. <http auto-config="true" access-denied-page="/common/403.jsp">
14. <!-- intercept-url:拦截器,可以设定哪些路径需要哪些权限来访问. filters=none 不使用过滤,也可以理解为忽略 -->
15. <intercept-url pattern="/index.jsp" access="ROLE_USER" />
16. <intercept-url pattern="/login.jsp" filters="none" />
17. <intercept-url pattern="/common/**" filters="none" />
18. <intercept-url pattern="/script/**" filters="none" />
19. <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
20. <intercept-url pattern="/user.jsp" access="ROLE_USER" />
21.           
22. <!-- session-management是针对session的管理. 这里可以不配置. 如有需求可以配置. -->
23. error-if-maximum-exceeded="true"
24. session-fixation-protection="none"
25.             创建新的session,并把用户信息复制到新session中.  
26. >
27. <session-management session-fixation-protection="none">
28. <concurrency-control/>
29. </session-management>
30.           
31. <!-- login-page:默认指定的登录页面. authentication-failure-url:出错后跳转页面. default-target-url:成功登陆后跳转页面 -->
32. <form-login login-page="/login.jsp"
33. authentication-failure-url="/common/403.jsp"
34. default-target-url="/admin.jsp" />
35. <!-- logout-success-url:成功注销后跳转到的页面; -->
36. <logout logout-success-url="/login.jsp"/>
37. <http-basic />
38.           
39. </http>
40.   
41.     <!--   
42.     连接池.我spring配置文件中配的有.所以这里就注掉了.  
43. <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
44. <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
45. <beans:property name="url" value="jdbc:mysql://localhost/demo"/>
46. <beans:property name="username" value="root"/>
47. <beans:property name="password" value="root"/>
48. </beans:bean>
49. >
50.   
51. <!-- 权限管理操作 -->
52. <authentication-manager>
53. <authentication-provider>
54.             <!--   
55.             密码加密方式. 常用的有md5 和 sha.   
56.             salt-source:忘记了.. 手头api关了,网速卡就不上网查了. 类似在md5上又加了一层. 放置暴力破解. 追加安全性.  
57. <password-encoder hash="md5">
58. <salt-source user-property="username"/>
59. </password-encoder>
60. >
61. <!-- 注入dataSource验证数据库中的用户名.密码.账号状态.和权限相关; -->
62. <jdbc-user-service data-source-ref="dataSource"
63. users-by-username-query="select username,password,enabled from user where username = ? and enabled = 1"
64. authorities-by-username-query="select u.username,r.name from user u join user_role ur on u.uid = ur.uid join role r on r.rid = ur.rid where u.username = ?" />
65.             <!--  
66.                 使用固定的用户名和密码及权限来做验证.   
67. <user-service>
68. <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
69. <user name="user" password="user" authorities="ROLE_USER" />
70. </user-service>
71. >
72. </authentication-provider>
73. </authentication-manager>
74. <!-- 
75.         <beans:bean id="userDetailsServiceImpl" class="com.demo.test.service.impl.UserDetailsServiceImpl" />
76.     -->
77.       
78.     <!--   
79.         此配置只是自己学习的一个小demo. 数据库也建的比较随意 比较简单. 使用的是角色权限. 个人比较推荐组权限来控制.. (由于工作经验限制,此处为个人理解)  
80.         我的库如下:  
81.         user:username\password\enabled  
82.         role:name\desc  
83.         user_role:uid\rid  
84. >
85. </beans:beans>



以上配置结束后可以完成用户登录\权限验证等操作. 



默认情况下,Spring Security(SS)的登录验证提交的Servlet默认名称为j_spring_security_check,但是很多情况下想将这个名称修改掉,后来终于在Spring的官方论坛上找到了一个哥们儿提出的类似的问题(见参考资料),原来只要修改<form-login>节点login-processing-url属性就可以了.


配置和使用到这里就结束了.