spring-security3 配置和使用

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

1、在spring-security官網下載最新jar然後拷貝jar到項目的lib下。
2、在classpath下添加security配置文件,例如applicationContext-security.xml.網上現在大多都是2.0的schema. 要根據自己使用的版本而定.下面是3.0的schema.



<?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>



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


<!-- 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的朋友配置的時候可能會出現問題.


使用篇

1、建立login.jsp頁面.內容如下:


<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:記住我...

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


<?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>


以上配置結束後可以完成用戶登錄\權限驗證等操作.
配置和使用到這裏就結束了. 今天下午的小心得.. spring-security很強大.

希望對沒有接觸過spring-security的朋友有所幫助
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章