使用的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方法未执行 我碰到的是这样的情况