使用的shiro jar版本
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
沒有自定義 PermissionsAuthorizationFilter
我碰到的情況就是過濾器中url匹配錯誤
1.先看看的資源表:
我要對url進行權限控制,可以看到數據庫中存的url是這樣的/XXX,比如:/code,後面都沒有接/**
2.而我在shiroConfig的shiroFilter的是這樣配置的
@Bean
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
bean.setSecurityManager(securityManager);
bean.setLoginUrl("/toLogin");
bean.setSuccessUrl("/success");
bean.setUnauthorizedUrl("/403");
bean.getFilters().put("authc", new ShiroAuthenticationFilter());
// 配置攔截器
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
//filterChainDefinitionMap.put("/", "anon");
// 查詢授權碼並設置
List<PermResourceDTO> perms = listPerm();
filterChainDefinitionMap.put("/**/*.js", "anon");
filterChainDefinitionMap.put("/**/*.css", "anon");
filterChainDefinitionMap.put("/static/**", "anon");
filterChainDefinitionMap.put("/user/login", "anon");
filterChainDefinitionMap.put("/logout", "logout");
for (PermResourceDTO perm : perms) {
filterChainDefinitionMap.put(perm.getUrl(), "perms[".concat(perm.getId()).concat("]"));
// filterChainDefinitionMap.put(perm.getUrl().concat("/**"), "perms[".concat(perm.getId()).concat("]"));
}
filterChainDefinitionMap.put("/code/", "roles[1]");
// filterChainDefinitionMap.put("/code/**", "roles[1]");
filterChainDefinitionMap.put("/**", "authc");
bean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return bean;
}
我之前是這樣配置的,perm.getUrl()方法就是獲取數據庫上面那張表中存儲的url
這樣寫是不完整的
這樣寫會匹配 /XX 的請求,但 /XX/YY 形式URL的請求卻不會匹配上,自然就不會進入授權操作
如是改成這樣就好了,加上 /**:
doGetAuthorizationInfo方法未執行 我碰到的是這樣的情況