1
回答
shiro 动态更新权限配置
华为云实践训练营,热门技术免费实践!>>>   

求教,代码执行了,配置也写进去了,但是拦截没生效,


public void updatePermission() {
		synchronized (shiroFilterFactoryBean) {
			AbstractShiroFilter shiroFilter = null;
			try {
				shiroFilter = (AbstractShiroFilter) shiroFilterFactoryBean.getObject();

				// 获取过滤管理器
				PathMatchingFilterChainResolver filterChainResolver = (PathMatchingFilterChainResolver) shiroFilter.getFilterChainResolver();
				DefaultFilterChainManager manager = (DefaultFilterChainManager) filterChainResolver.getFilterChainManager();

				// 清空初始权限配置
				manager.getFilterChains().clear();
				shiroFilterFactoryBean.getFilterChainDefinitionMap().clear();

				// 重新构建生成
				shiroFilterFactoryBean.setFilterChainDefinitionMap(obtainPermission());

				Map<String, String> chains = shiroFilterFactoryBean.getFilterChainDefinitionMap();
				for (Map.Entry<String, String> entry : chains.entrySet()) {
					manager.createChain(entry.getKey(), entry.getValue().trim().replace(" ", ""));
					System.err.println(entry.toString());
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}



举报
justtototo
发帖于1年前 1回/717阅
 manager.getFilterChains().clear(); 
 shiroFilterFactoryBean.getFilterChainDefinitionMap().clear();   // 重新构建生成 // 
 shiroFilterFactoryBean.setFilterChainDefinitions(definitions);  
shiroFilterFactoryBean.setFilterChainDefinitionMap(initOtherPermission()); 
 Map<String, String> chains = shiroFilterFactoryBean.getFilterChainDefinitionMap(); 

重构的时候已经清空了初始化的权限配置所以需要加载一下初始化权限

shiroFilterFactoryBean.setFilterChainDefinitionMap(initOtherPermission()); 

顶部