shiro 动态加载权限 数据库及配置文件

本文介绍了如何实现Shiro动态加载配置文件中的URL权限和数据库中的权限,包括核心思路、重新加载权限的步骤,以及如何将权限逻辑从&&改为||。详细讲述了通过重写Shiro的相关方法来清空权限缓存并重新加载,确保权限更新后的生效,并提供了shiro.xml配置文件的用户权限配置说明。
摘要由CSDN通过智能技术生成

shiro 动态加载权限 数据库及配置文件

动态加载配置文件中的url 和数据库中的配置url
修改权限时 重新加载配置文件中的url 和数据库中的配置url到shiro中

核心

重写org.apache.shiro.spring.web.ShiroFilterFactoryBean.setFilterChainDefinitions()方法 动态加载url权限

清空org.apache.shiro.web.filter.mgt.DefaultFilterChainManager.filterChains权限缓存
清空org.apache.shiro.web.filter.PathMatchingFilter.appliedPaths权限缓存
使用org.apache.shiro.web.filter.mgt.DefaultFilterChainManager.createChain(String, String)添加url权限


加载配置文件中的url 和数据库中的权限

public class MyShiroFilterFactoryBean extends ShiroFilterFactoryBean {
   

    /**记录配置中的过滤链*/
    public static String definition="";

    private IUserService userService;

    public IUserService getUserService() {
        return userService;
    }

    public void setUserService(IUserService userService) {
        this.userService = userService;
    }


    /**
     * 初始化设置过滤链
     */
    @Override
    public void setFilterChainDefinitions(String definitions) {
        definition = definitions;//记录配置的静态过滤链

            List<SysMenuVO> permissions = userService.findPermissionAll();
            //数据库中的url权限 
            Map<String, String> otherChains = new HashMap<String,String>();
            Map<String, String> values = new HashMap<>();    
            permissions.forEach(permiss->{
                String url = permiss.getUrl();
                String itemCode = permiss.getItemCode();
                if (values.containsKey(url)) { 
                    String perms = values.get(url);                                 
                    if (!perms.contains(itemCode)) {
                        perms =perms+","+itemCode;
                        values.put(url, perms);
                        otherChains.put(url,"perms[\""+ perms+"\"]");
                    }
                }else{
                    values.put(url, itemCode);
                    otherChains.put(url, "perms["
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值