前面講到了SpringSecurity的簡單配置,今天做一個簡單的測試,先看配置文件
~~~
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:sec="http://www.springframework.org/schema/security"
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.1.xsd">
<!-- 配置不過濾的資源(靜態資源及登錄相關) -->
<sec:http pattern="/**/*.css" security="none"></sec:http>
<sec:http pattern="/**/*.jpg" security="none"></sec:http>
<sec:http pattern="/**/*.jpeg" security="none"></sec:http>
<sec:http pattern="/**/*.gif" security="none"></sec:http>
<sec:http pattern="/**/*.png" security="none"></sec:http>
<sec:http pattern="/js/*.js" security="none"></sec:http>
<sec:http pattern="/login.jsp" security="none"></sec:http>
<sec:http pattern="/getCode" security="none" /><!-- 不過濾驗證碼 -->
<sec:http pattern="/test/**" security="none"></sec:http><!-- 不過濾測試內容 -->
<sec:http auto-config="true">
<sec:intercept-url pattern="/app.jsp" access="ROLE_SERVICE"/>
<sec:intercept-url pattern="/**" access="ROLE_ADMIN"/>
</sec:http>
<sec:authentication-manager>
<sec:authentication-provider>
<sec:user-service >
<sec:user name="admin" password="admin" authorities="ROLE_ADMIN"/>
</sec:user-service>
</sec:authentication-provider>
</sec:authentication-manager>
</beans>
~~~
其中
<sec:http pattern="" security="none"></sec:http>
是忽略攔截某些資源的意思,主要是針對靜態資源
<sec:intercept-url pattern="/app.jsp" access="ROLE_SERVICE"/>
表示訪問app.jsp時,需要ROLE_SERVICE權限
<sec:intercept-url pattern="/**" access="ROLE_ADMIN"/>
表示訪問任何資源都需要ROLE_ADMIN權限。
注:/**的配置要放到最后,因為如果放到最前面的話就失去了攔截意義,任何只要有ROLE_ADMIN權限的用戶都可以訪問任何資源,并不會對app.jsp攔截。因為在訪問app.jsp的時候先經過<sec:intercept-url pattern="/**" access="ROLE_ADMIN"/>,、/**又表示任何資源,所以只要具有ROLE_ADMIN權限就會放行。如果放到最后,先經過<sec:intercept-url pattern="/app.jsp" access="ROLE_SERVICE"/>,這時候訪問app.jsp是就會先判斷用戶是否有ROLE_SERVICE權限,如果有則放行,反之攔截。
權限必須已ROLE_開頭,在后面的文章中我們會講到如何修改權限頭和去掉權限頭
authentication-manager用來配置用戶管理,在這里我們定義了一個admin用戶并且具有ROLE_ADMIN權限,也就是說我們訪問任何資源都可以但是訪問app.jsp時將被攔截
在沒有自定義登錄頁面之前,SpringSecurity會自動生成登錄頁面,如下圖

然后輸入admin/admin登錄

然后訪問app.jsp發現已被spring攔截,說明我們的配置成功了

符:在JSP頁面獲取當前登錄的用戶名的方法
首先引入taglib
~~~
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
~~~
然后在jsp頁面中使用下面的方法就可以獲取到用戶名了
~~~
<sec:authentication property="name"/>
~~~
在此僅僅是為了方便測試所以只說下獲取用戶名的方法,如何獲取用戶的其他信息將在后續的章節中講到
- 前言
- (大綱)----學習過程分享
- (1)----SpringSecurity3.2環境搭建
- (2)----SpringSecurity簡單測試
- (3)---- 自定義登錄頁面
- (4)---- 數據庫表結構的創建
- (5)---- 國際化配置及UserCache
- (6)---- 使用數據庫管理用戶及權限
- (7)---- 解決UsernameNotFoundException無法被捕獲的問題
- (8)---- 自定義決策管理器及修改權限前綴
- (9)---- 自定義AccessDeniedHandler
- (10)---- 自定義登錄成功后的處理程序及修改默認驗證地址
- (11)---- 使用數據庫來管理資源
- (12)---- 使用數據庫來管理方法
- (13)---- 驗證碼功能的實現
- (14)---- Logout和SessionManager