1. 程式人生 > >Shiro學習筆記——資料庫讀取許可權資訊(不使用硬編碼的方式)

Shiro學習筆記——資料庫讀取許可權資訊(不使用硬編碼的方式)

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),作為ShiroFilterFactoryBeanfilterChainDefinitionMap屬性的一個例項。 這樣既可以去外部儲存讀取許可權的配置資訊。