spring-security3 配置和使用.

 

最近項目中要使用到spring-security,閒來沒事就研究了下。發現入門挺簡單的,在這裏把本身的心得發下,但願對沒有接觸過想接觸的朋友有幫助。

一、在spring-security官網下載最新jar而後拷貝jar到項目的lib下。
二、在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 
6. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
7. http://www.springframework.org/schema/security 
8. http://www.springframework.org/schema/security/spring-security-3.0.xsd">
9.
10.</beans:beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/security
	http://www.springframework.org/schema/security/spring-security-3.0.xsd">

</beans:beans>

 三、而後在web.xml中添加配置,內容以下:



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>
<!-- spring security  -->
        <context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath*:/applicationContext*.xml
		</param-value>
	</context-param>

	<filter>
		<filter-name>springSecurityFilterChain</filter-name>
		<filter-class>
			org.springframework.web.filter.DelegatingFilterProxy
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>springSecurityFilterChain</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>


 配置起來很簡單,因爲個人security是整合到現有項目中的.一些jar可能已經存在. 單獨作demo的朋友配置的時候可能會出現問題.


使用篇

一、創建login.jsp頁面.內容以下:



Html代碼 
1.<form action="<%=path %>/j_spring_security_check" method="post">
2. USERNAME:<input type="text" name="j_username" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}" /><br/>
3. PASSWORD:<input type="password" name="j_password" value="" /><br/>
4.<input type="checkbox" name="_spring_security_remember_me" />兩週以內沒必要登錄<br/>
5.<input type="submit">
6.</form>
<form action="<%=path %>/j_spring_security_check" method="post">
    	USERNAME:<input type="text" name="j_username" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}" /><br/>
    	PASSWORD:<input type="password" name="j_password" value="" /><br/>
    	<input type="checkbox" name="_spring_security_remember_me" />兩週以內沒必要登錄<br/>
		<input type="submit">    	
    </form>


 j_spring_security_check : 爲security驗證中心(不知道怎麼說合適.暫時這麼理解吧..).
j_username: 驗證用戶名;
j_password: 驗證密碼;
${sessionScope['SPRING_SECURITY_LAST_USERNAME']}:使用最後一次登陸用戶名.
_spring_security_remember_me:記住我... 

二、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. http://www.springframework.org/schema/security/spring-security-3.0.xsd">
9.
10. <!-- auto-config = true 則使用from-login. 若是不使用該屬性 則默認爲http-basic(沒有session). 
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. <!-- id登錄惟一. 後登錄的帳號會擠掉第一次登錄的帳號 error-if-maximum-exceeded="true" 禁止2次登錄; 
24.session-fixation-protection="none" 防止僞造sessionid攻擊. 用戶登陸成功後會銷燬用戶當前的session. 
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>
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/security
	http://www.springframework.org/schema/security/spring-security-3.0.xsd">

	<!-- auto-config = true 則使用from-login. 若是不使用該屬性 則默認爲http-basic(沒有session). 
		access-denied-page:出錯後跳轉到的錯誤頁面;
	-->
	<http auto-config="true" access-denied-page="/common/403.jsp">
		<!-- intercept-url:攔截器,能夠設定哪些路徑須要哪些權限來訪問. filters=none 不使用過濾,也能夠理解爲忽略 -->
		<intercept-url pattern="/index.jsp" access="ROLE_USER" />
		<intercept-url pattern="/login.jsp" filters="none" />
		<intercept-url pattern="/common/**" filters="none" />
		<intercept-url pattern="/script/**" filters="none" />
		<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
		<intercept-url pattern="/user.jsp" access="ROLE_USER" />
		
		<!-- session-management是針對session的管理. 這裏能夠不配置. 若有需求能夠配置. -->
		<!-- id登錄惟一. 後登錄的帳號會擠掉第一次登錄的帳號  error-if-maximum-exceeded="true" 禁止2次登錄;
			session-fixation-protection="none" 防止僞造sessionid攻擊. 用戶登陸成功後會銷燬用戶當前的session.
			建立新的session,並把用戶信息複製到新session中.
		 -->
		<session-management session-fixation-protection="none">
			<concurrency-control/>
		</session-management>
		
		<!-- login-page:默認指定的登陸頁面. authentication-failure-url:出錯後跳轉頁面. default-target-url:成功登錄後跳轉頁面 -->
		<form-login login-page="/login.jsp"
			authentication-failure-url="/common/403.jsp"
			default-target-url="/admin.jsp" />
		<!-- logout-success-url:成功註銷後跳轉到的頁面; -->
		<logout logout-success-url="/login.jsp"/>
		<http-basic />
		
	</http>

	<!-- 
	鏈接池.我spring配置文件中配的有.因此這裏就注掉了.
	<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
        <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
        <beans:property name="url" value="jdbc:mysql://localhost/demo"/> 
        <beans:property name="username" value="root"/> 
        <beans:property name="password" value="root"/> 
    </beans:bean> 
	 -->

	<!-- 權限管理操做 -->
	<authentication-manager>
		<authentication-provider>
			<!-- 
			密碼加密方式. 經常使用的有md5 和 sha. 
			salt-source:忘記了.. 手頭api關了,網速卡就不上網查了. 相似在md5上又加了一層. 放置暴力破解. 追加安全性.
			<password-encoder hash="md5">
				<salt-source user-property="username"/>
			</password-encoder>
			 -->
			 <!-- 注入dataSource驗證數據庫中的用戶名.密碼.帳號狀態.和權限相關; -->
			<jdbc-user-service data-source-ref="dataSource"
				users-by-username-query="select username,password,enabled from user where username = ? and enabled = 1"
				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 = ?" />
			<!--
				使用固定的用戶名和密碼及權限來作驗證. 
				<user-service>
				<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
				<user name="user" password="user" authorities="ROLE_USER" />
				</user-service>
			-->
		</authentication-provider>
	</authentication-manager>
	<!-- 
		<beans:bean id="userDetailsServiceImpl" class="com.demo.test.service.impl.UserDetailsServiceImpl" />
	-->
	
	<!-- 
		此配置只是本身學習的一個小demo. 數據庫也建的比較隨意 比較簡單. 使用的是角色權限. 我的比較推薦組權限來控制.. (因爲工做經驗限制,此處爲我的理解)
		個人庫以下:
		user:username\password\enabled
		role:name\desc
		user_role:uid\rid
	 -->
</beans:beans>

 以上配置結束後能夠完成用戶登陸\權限驗證等操做.
相關文章
相關標籤/搜索