對於使用spring security來說,存在一種需求,就是動態去配置url的許可權,即在執行時去配置url對應的訪問角色。這裡簡單介紹一下。
首先需要了解spring security內建的各種filter:
n/a
這裡我們要操作的是filtersecurityinterceptor這個interceptor,使用withobjectpostprocessor來設定這個filter有幾個要素,如下:
可以根據情況自己去重新設定,這裡我們重寫一下securitymetadatasource用來動態獲取url許可權配置,還有accessdecisionmanager來進行許可權判斷。
public class myaccessdecisionmanager implements org.springframework.security.access.accessdecisionmanager
iteratorite = configattributes.iterator();
while (ite.hasnext()) }}
//該url有配置許可權,但是當然登入使用者沒有匹配到對應許可權,則禁止訪問
throw new accessdeniedexception("not allow");
}@override
public boolean supports(configattribute attribute)
@override
public boolean supports(class<?> clazz)
}
這裡遍歷判斷該url所需的角色看使用者是否具備,有具備則返回,都不具備則丟擲accessdeniedexception異常
public class myfilterinvocationsecuritymetadatasource implements org.springframework.security.web.access.intercept.filterinvocationsecuritymetadatasource };
@override
public collectiongetattributes(object object) throws illegalargumentexception
}//沒有匹配到,預設是要登入才能訪問
return securityconfig.createlist("role_user");
// return null;
}@override
public collectiongetallconfigattributes()
@override
public boolean supports(class<?> clazz)
}
這裡以記憶體的map來展示一下,實際應用可以從分布式配置中心或者資料庫中讀取,另外迴圈遍歷這個可能消耗效能,必要時得優化一下。最後需要綜合配置一下,如下
@enablewebsecurity
public class securityconfig extends websecurityconfigureradapter
});}
@bean
public filterinvocationsecuritymetadatasource mysecuritymetadatasource()
@bean
public accessdecisionmanager myaccessdecisionmanager()
}
spring security 安全框架
本文 http itblood.com spring security security framework.html 安全常識 acegi介紹 以宣告式方式為基於spring的web應用新增認證和授權控制 acegi體系結構 認證管理器 訪問控制管理器。認證 authenticationproce...
SpringSecurity認證流程
在之前的文章 springboot spring security 基本使用及個性化登入配置 中對springsecurity進行了簡單的使用介紹,基本上都是對於介面的介紹以及功能的實現。這一篇文章嘗試從原始碼的角度來上對使用者認證流程做乙個簡單的分析。在具體分析之前,我們可以先看看springse...
SpringSecurity使用技巧
1 鑑權處理頁通常包括四個方面的設定,分別是鑑權失敗 鑑權成功 未鑑權訪問 已鑑權但訪問了受保護許可權。如何自 定義這四類處理。鑑權失敗的預設處理頁面是 spring security login?login error 其預設處理類為 urlauthenticationfailurehandler...