Shiro學習筆記——資料庫讀取許可權資訊(不使用硬編碼的方式)
阿新 • • 發佈:2018-12-09
在ShiroFilterFactoryBean
初始化的過程中,會執行一個setFilterChainDefinitionMap
方法,傳入了一個Map,該Map就是URL與許可權的對應關係。
編寫一個例項工廠方法
FilterChainDefinitionMapBuilder.java:
public class FilterChainDefinitionMapBuilder {
public LinkedHashMap<String, String> buildFilterChainDefinitionMap(){
LinkedHashMap<String ,String> map = new LinkedHashMap<>();
map.put("/login.jsp", "anon");
map.put("/shiro/login", "anon");
map.put("/shiro/logout", "logout");
map.put("/user.jsp", "roles[user]");
map.put("/admin.jsp", "roles[admin]");
map.put("/**", "authc");
return map;
}
}
該工廠方法內部可以訪問資料庫,或訪問外部配置檔案,進行許可權配置的動態載入。
配置IOC容器
applicationContext.xml
<bean id="shiroFilter"
class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/login.jsp" />
<property name="successUrl" value="/list.jsp" />
<property name="unauthorizedUrl" value="/unauthorized.jsp" />
<property name="filterChainDefinitionMap"
ref="filterChainDefinitionMap" />
<!-- 配置一個bean,該bean實際上是一個map,通過例項工廠方法的方法 -->
<bean id="filterChainDefinitionMap"
factory-bean="filterChainDefinitionMapBuilder"
factory-method="buildFilterChainDefinitionMap"></bean>
<bean id="filterChainDefinitionMapBuilder"
class="com.shen.shiro.factory.FilterChainDefinitionMapBuilder"></bean>
(1)配置一個例項工廠方法,作為動態載入許可權配置的載體。
(2)配置一個bean(Map),作為ShiroFilterFactoryBean
的filterChainDefinitionMap
屬性的一個例項。
這樣既可以去外部儲存讀取許可權的配置資訊。