public void updatePermission() { synchronized (shiroFilterFactoryBean) { try { AbstractShiroFilter shiroFilter = (AbstractShiroFilter) shiroFilterFactoryBean.getObject(); // 获取过滤管理器 PathMatchingFilterChainResolver filterChainResolver = (PathMatchingFilterChainResolver) shiroFilter.getFilterChainResolver(); DefaultFilterChainManager manager = (DefaultFilterChainManager) filterChainResolver.getFilterChainManager(); // 清空初始权限配置 manager.getFilterChains().clear(); shiroFilterFactoryBean.getFilterChainDefinitionMap().clear(); // 重新构建生成 Map<String, String> chains = new LinkedHashMap<>(); chains.putAll(initOtherPermission()); chains.putAll(defaultFilterChainDefinitionMap); for (Map.Entry<String, String> entry : chains.entrySet()) { String url = entry.getKey(); String chainDefinition = entry.getValue(); manager.createChain(url, chainDefinition); } logger.debug("update shiro permission success..."); } catch (Exception e) { logger.error(e.getMessage()); } } }
DefaultFilterChainManager manager = (DefaultFilterChainManager) filterChainResolver.getFilterChainManager(); manager.getFilterChains().clear(); shiroFilterFactoryBean.getFilterChainDefinitionMap().clear(); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
manager.getFilterChains().clear();
public void reloadFilterChain() { ShiroFilterFactoryBean shiroFilterFactoryBean = SpringContextHolder.getBean(ShiroFilterFactoryBean.class); AbstractShiroFilter abstractShiroFilter = null; try { abstractShiroFilter = (AbstractShiroFilter)shiroFilterFactoryBean.getObject(); RestPathMatchingFilterChainResolver filterChainResolver = (RestPathMatchingFilterChainResolver)abstractShiroFilter.getFilterChainResolver(); DefaultFilterChainManager filterChainManager = (DefaultFilterChainManager)filterChainResolver.getFilterChainManager(); filterChainManager.getFilterChains().clear(); shiroFilterFactoryBean.getFilterChainDefinitionMap().clear(); shiroFilterFactoryBean.setFilterChainDefinitionMap(this.initGetFilterChain()); shiroFilterFactoryBean.getFilterChainDefinitionMap().forEach((k,v) -> filterChainManager.createChain(k,v)); }catch (Exception e) { LOGGER.error(e.getMessage(),e); } } }
manager.getFilterChains().clear();
/*** * 重新加载权限 */ @Override public void updatePermission() { ShiroFilterFactoryBean shiroFilterFactoryBean= SpringContextHolder.getBean(ShiroFilterFactoryBean.class); synchronized (shiroFilterFactoryBean){ AbstractShiroFilter abstractShiroFilter =null; try{ abstractShiroFilter =(AbstractShiroFilter) shiroFilterFactoryBean.getObject(); }catch (Exception e) { throw new RuntimeException("Get AbstractShiroFilter error"); } PathMatchingFilterChainResolver pathMatchingFilterChainResolver=(PathMatchingFilterChainResolver)abstractShiroFilter.getFilterChainResolver(); DefaultFilterChainManager defaultFilterChainManager=(DefaultFilterChainManager)pathMatchingFilterChainResolver.getFilterChainManager(); //清空老的权限控制 defaultFilterChainManager.getFilterChains().clear(); shiroFilterFactoryBean.getFilterChainDefinitionMap().clear(); shiroFilterFactoryBean.setFilterChainDefinitionMap(loadFilterChainDefinitions()); //重新构建生成 Map<String,String> map=shiroFilterFactoryBean.getFilterChainDefinitionMap(); for(Map.Entry<String,String> stringEntry:map.entrySet()){ String url=stringEntry.getKey(); String chainDefinition=stringEntry.getValue().trim().replace(" ",""); defaultFilterChainManager.createChain(url,chainDefinition); } } log.info("[hope权限重新加载成功,低调小熊猫博客:https://aodeng.cc]"); }
/** * 重新加载权限 */ @Override public void updatePermission() { ShiroFilterFactoryBean shirFilter = SpringContextHolder.getBean(ShiroFilterFactoryBean.class); synchronized (shirFilter) { AbstractShiroFilter shiroFilter = null; try { shiroFilter = (AbstractShiroFilter) shirFilter.getObject(); } catch (Exception e) { throw new RuntimeException("get ShiroFilter from shiroFilterFactoryBean error!"); } PathMatchingFilterChainResolver filterChainResolver = (PathMatchingFilterChainResolver) shiroFilter.getFilterChainResolver(); DefaultFilterChainManager manager = (DefaultFilterChainManager) filterChainResolver.getFilterChainManager(); // 清空老的权限控制 manager.getFilterChains().clear(); shirFilter.getFilterChainDefinitionMap().clear(); shirFilter.setFilterChainDefinitionMap(loadFilterChainDefinitions()); // 重新构建生成 Map<String, String> chains = shirFilter.getFilterChainDefinitionMap(); for (Map.Entry<String, String> entry : chains.entrySet()) { String url = entry.getKey(); String chainDefinition = entry.getValue().trim().replace(" ", ""); manager.createChain(url, chainDefinition); } } }
/** * 重新加载权限 */ public void updatePermission() { ShiroFilterFactoryBean shirFilter = SpringContextHolder.getBean(ShiroFilterFactoryBean.class); synchronized (shirFilter) { AbstractShiroFilter shiroFilter = null; try { shiroFilter = (AbstractShiroFilter) shirFilter.getObject(); } catch (Exception e) { throw new RuntimeException("get ShiroFilter from shiroFilterFactoryBean error!"); } PathMatchingFilterChainResolver filterChainResolver = (PathMatchingFilterChainResolver) shiroFilter.getFilterChainResolver(); DefaultFilterChainManager manager = (DefaultFilterChainManager) filterChainResolver.getFilterChainManager(); // 清空老的权限控制 manager.getFilterChains().clear(); shirFilter.getFilterChainDefinitionMap().clear(); shirFilter.setFilterChainDefinitionMap(loadFilterChainDefinitions()); // 重新构建生成 Map<String, String> chains = shirFilter.getFilterChainDefinitionMap(); for (Map.Entry<String, String> entry : chains.entrySet()) { String url = entry.getKey(); String chainDefinition = entry.getValue().trim().replace(" ", ""); manager.createChain(url, chainDefinition); } } }
@Override public void reloadPerms() { ShiroFilterFactoryBean shiroFilterFactoryBean = SpringUtils.getBean(ShiroFilterFactoryBean.class); AbstractShiroFilter abstractShiroFilter; try { abstractShiroFilter = (AbstractShiroFilter) shiroFilterFactoryBean.getObject(); } catch (Exception e) { throw new RequestException(ResponseCode.FAIL.code,"重新加载权限失败",e); } PathMatchingFilterChainResolver filterChainResolver = (PathMatchingFilterChainResolver) abstractShiroFilter.getFilterChainResolver(); DefaultFilterChainManager manager = (DefaultFilterChainManager) filterChainResolver .getFilterChainManager(); /*清除旧版权限*/ manager.getFilterChains().clear(); shiroFilterFactoryBean.getFilterChainDefinitionMap().clear(); /*更新新数据*/ Map<String, String> filterChainDefinitionMap = getFilterChainDefinitionMap(); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); filterChainDefinitionMap.forEach(manager::createChain); }