2.6.6 anyrequest()
在之前認證過程中我們就已經使用過anyrequest(),表示匹配所有的請求,一般情況下此方法都會使用,設定全部內容都需要進行認證。
.anyrequest().authenticatied();
2.6.7 antmatcher()
方法定義如下:
public c antmatcher(string… antpatterns)
引數是不定向引數,每乙個引數是有乙個ant表示式,用於匹配url規則
規則如下:
在實際專案中經常需要放行所有的靜態資源,下面演示放行js資料夾下所有的指令碼檔案
.
antmatchers
("/js/**"
,"/css/**").
permitall()
;
還有一種配置方式是只要是js檔案就放行
.
antmatchers
("/**/*.js").
permitall()
;
2.6.8 regexmatcher().
regexmatchers
(".+[.]png").
permitall()
; 正規表示式 放行 所有的png
//指定請求方法
2.6.9 mvcmatchers 詳解
如果我們想讓整個專案訪問位址前都加上/***x
現在有了mvcmatchers方法後我們可以這樣寫
.
mvcmatchers(.
..patterns:
"/demo").
servletpath
("/***x").
permitall
()
2.7 內建控制方法
2.7.1
permitall 允許所有的訪問
denyall 禁止所有的訪問
anonymous 匿名訪問
authenticated 認證之後可以訪問 只要登入進來就能訪問
fullyauthenticated 必須使用者名稱和密碼登入之後才能訪問
rememberme 在免登陸下進行訪問
2.8 角色許可權判斷
除了之前講解的內建許可權控制。spring security中還支援很多其他許可權控制。這些方法一般都用於使用者已經被認證後,判斷使用者是否具有特定的要求。
基於許可權
2.8.1 hasauthority(string)
判斷使用者是否具有特定的許可權,使用者的許可權是在自定義登入邏輯中建立user物件時指定的。下圖中admin和normal就是使用者的許可權。admin 和 normal 嚴格區分大小寫。
在配置類中通過hasauthority(「admin」)設定具有admin許可權時才能訪問
.
antmatchers
("/main.html").
hasauthority
("admin"
)
2.8.2 hasanyauthority(string …)
如果使用者具備給定許可權中的某乙個,就允許訪問
基於角色
2.8.3 hasrole(string)
判斷使用者是否具有特定的角色,使用者的角色是在自定義登入邏輯中建立user物件時指定的。下圖中"role_abc"就是使用者的角色,角色的新增role_是必須要有的,role_abc就代表abc是角色
在配置類中通過hasrole(「abc」)設定具有abc角色時才能訪問
.
antmatchers
("/main.html").
hasrole
("abc"
)
2.8.4 hasanyrole(string…)
如果使用者具備給定角色中的某乙個,就允許訪問
基於ip位址
2.8.5 hasipaddress(string)
在配置類中通過hasipaddress(「192.168.50.1」)設定192.168.50.1的伺服器才能訪問
.
antmatchers
("/main.html").
hasipaddress
("192.168.50.1"
)
2.9 自定義403處理方法
自定義myaccessdeniedhandler類
@component
public
class
myaccessdeniedhandler
implements
accessdeniedhandler
}
在配置類中加入:
嗎 @autowired
private myaccessdeniedhandler accessdeniedhandler;
//異常處理
;
2.10 基於表示式的訪問控制
可以通過access方法實現上面訪問控制一樣的功能
.
antmatches
("/main.html").
access
("hasrole('abc')"
) 等價於
.antmatchers
("/main.html").
hasrole
("abc"
)
2.11基於註解的訪問控制
在spring security中提供了一些訪問控制的註解,這些註解都是預設是都不可用的,需要通過@enableglobalmethodsecuriy進行開啟後使用。
如果設定的條件允許, 程式可以正常執行。如果不允許會報500
org.soringfreamework.security.access.accessdeniedexception:不允許訪問
這些註解可以寫到service介面或方法上,也可以寫到controller或controller的方法上,通常情況下都寫在控制器方法上,控制介面url是否允許被訪問。
2.11.1 @secured
@secured是專門用於判斷是否具有角色的,都寫在方法或類上,引數要以role_開頭
preauthorize允許角色以role_開頭,也可以不以role_開頭,但是配置類不允許以role_開頭
Spring security 邊做邊學
之前遇到乙個需求,在執行時決定允許訪問的url的角色。而不是在xml裡配置。解決方案是實現自己的voter類。現在遇到另乙個需求,應用有2個不同的登入頁面。比如 普通使用者 通過 demo user login.jsp,而管理員 通過 demo admin login.jsp 登入系統。之後,進入不...
spring security2配置檔案學習小結
使用命名空間,主要分為3個部分 a.註冊過濾器鏈,配置表單登陸,登出等 b.註冊自定義的安全認證管理器 c.註冊自定義的授權過濾器 2.a.元素會建立乙個filterchainproxy和filter使用的bean。以前常常出現的因為filter順序不正確產生的問題不會再出現了,現在這些過濾器的位置...
spring security 安全框架
本文 http itblood.com spring security security framework.html 安全常識 acegi介紹 以宣告式方式為基於spring的web應用新增認證和授權控制 acegi體系結構 認證管理器 訪問控制管理器。認證 authenticationproce...