最近項目中要使用到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> 以上配置結束後能夠完成用戶登陸\權限驗證等操做.