shiro权限动态改变后数据库重新加载shiro权限

xiaoxiao2025-04-04  12

@Service public class ShiroServiceImpl { @Autowired @Qualifier("shiroFilter") private ShiroFilterFactoryBean shiroFilterFactoryBean; @Autowired @Qualifier("loginServiceImpl") private LoginService loginService; /** * 初始化权限 */ public Map<String, String> loadFilterChainDefinitions() { // 权限控制map.从数据库获取 Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>(); filterChainDefinitionMap.put("/login/loginUser", "anon"); filterChainDefinitionMap.put("/login/logout","anon"); filterChainDefinitionMap.put("/login/getcaptcha","anon"); filterChainDefinitionMap.put("/bootstrap/css/**", "anon"); filterChainDefinitionMap.put("/bootstrap/fonts/**", "anon"); filterChainDefinitionMap.put("/bootstrap/js/**", "anon"); filterChainDefinitionMap.put("/css/**", "anon"); filterChainDefinitionMap.put("/h-ui/**", "anon"); filterChainDefinitionMap.put("/image/**", "anon"); filterChainDefinitionMap.put("/js/**", "anon"); List<ShiroMenuUrl> shiroMenuUrlList = loginService.selectShiroMenuUrl(); for(ShiroMenuUrl shiroMenuUrl : shiroMenuUrlList){ filterChainDefinitionMap.put(shiroMenuUrl.getUrl(), "authc,perms[" + shiroMenuUrl.getShiroUrl() +"]"); } filterChainDefinitionMap.put("/**", "authc"); return filterChainDefinitionMap; } /** * 重新加载权限 */ public void updatePermission() { synchronized (shiroFilterFactoryBean) { AbstractShiroFilter shiroFilter; try { shiroFilter = (AbstractShiroFilter) shiroFilterFactoryBean.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(); shiroFilterFactoryBean.getFilterChainDefinitionMap().clear(); shiroFilterFactoryBean.setFilterChainDefinitionMap(loadFilterChainDefinitions()); // 重新构建生成 Map<String, String> chains = shiroFilterFactoryBean.getFilterChainDefinitionMap(); for (Map.Entry<String, String> entry : chains.entrySet()) { String url = entry.getKey(); String chainDefinition = entry.getValue().trim().replace(" ", ""); manager.createChain(url, chainDefinition); } System.out.println("更新权限成功!!"); } } }
转载请注明原文地址: https://www.6miu.com/read-5027474.html

最新回复(0)