前言
今天遇到个问题,项目中用的是shiro和jwt,自定义了一个jwt过滤器来判断当前请求是否有权限,项目跑起来后发现所有的请求都不走过滤器,直接放行了?
解决
在shiroConfig中是这么配置的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Map<String, String> filterRuleMap = new HashMap<>(2);
filterRuleMap.put("/druid/**", "anon");
filterRuleMap.put("/websocket/*", "anon");
filterRuleMap.put("/swagger-ui.html", "anon"); filterRuleMap.put("/swagger-resources", "anon"); filterRuleMap.put("/v2/api-docs", "anon"); filterRuleMap.put("/webjars/springfox-swagger-ui/**", "anon");
filterRuleMap.put("/**", "jwt"); filterRuleMap.put("/**", "anon"); factoryBean.setFilterChainDefinitionMap(filterRuleMap);
|
一眼看过去好像没什么问题,但是就是不走自定义的jwt过滤器,所以判断问题一定出在这里,经过打断点后,发现filterRuleMap
中的”/**”没有jwt这条,居然是下面的这个anon这个,那就没啥问题了
总结
anon
的匿名的缩写,走的是shiro的默认过滤器,默认放行接口,因为前面是/**
,因此会放行所有接口,不走我们的过滤器,删除这行后,接口正常走过滤器