Shiro-從數據表中初始化資源和權限


我們在 applicationContext中配置受保護的資源和權限的關系

    <property name="filterChainDefinitions">
            <value>
                /login.jsp= anon
                /shiro/login= anon
                /shiro/logout = logout
                
                /user.jsp = roles[user]
                /admin.jsp = roles[admin]
                
                # everything else requires authentication:
                
                /** = authc
            </value>
        </property>

 

 這樣配置有時候我們受保護的資源和權限特別多,我們希望將這些配置資源和權限信息放到數據庫中,然后我們通過一個SQL 的方式取出來, 這種方式應該是最合適的。

  我們可以查看 配置中 filterChainDefinitions 的源碼

public void setFilterChainDefinitions(String definitions) {
        Ini ini = new Ini();
        ini.load(definitions);
        //did they explicitly state a 'urls' section?  Not necessary, but just in case:
        Ini.Section section = ini.getSection(IniFilterChainResolverFactory.URLS);
        if (CollectionUtils.isEmpty(section)) {
            //no urls section.  Since this _is_ a urls chain definition property, just assume the
            //default section contains only the definitions:
            section = ini.getSection(Ini.DEFAULT_SECTION_NAME);
        }
        setFilterChainDefinitionMap(section);
    }

 

 

1 public void setFilterChainDefinitionMap(Map<String, String> filterChainDefinitionMap) {
2         this.filterChainDefinitionMap = filterChainDefinitionMap;
3     }

 

通過 debug的方式 可以看到在初始化時, filterChainDefinitionMap是一個LinkedHashMap,其內容就是我們在配置文件中配置的內容

 

 所以我們可以配置一個單獨的bean filterChainDefinitionMap 作為ShiroFilterFactoryBean的屬性。

 修改applicationContext.xml

 

創建一個 bean

package com.java.shiro.factory;

import java.util.LinkedHashMap;

public class FilterChainDefinitionMapBuilder {

    public LinkedHashMap<String, String> buildFilterChainDefinitionMap() {
        LinkedHashMap<String, String> map = new LinkedHashMap<>();

        // 在實際開發中訪問數據表

    
     //這里必須是一個LinkedHashMap 保持順序 map.put("/login.jsp", "anon"); map.put("/**", "authc"); return map; } }

 

 

  再次打斷點查看 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM