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;
    }

}

 

  再次打断点查看 

转载于:https://my.oschina.net/zjllovecode/blog/1604132

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值