Shiro Filter的一个问题

前言

今天遇到个问题,项目中用的是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);
// 访问401和404页面不通过我们的Filter
//通过http://127.0.0.1:9527/druid/index.html 访问
filterRuleMap.put("/druid/**", "anon");
//放行webSocket
filterRuleMap.put("/websocket/*", "anon");
//放行swagger
filterRuleMap.put("/swagger-ui.html", "anon");
filterRuleMap.put("/swagger-resources", "anon");
filterRuleMap.put("/v2/api-docs", "anon");
filterRuleMap.put("/webjars/springfox-swagger-ui/**", "anon");
// 所有请求通过我们自己的JWT Filter
filterRuleMap.put("/**", "jwt");
filterRuleMap.put("/**", "anon");
factoryBean.setFilterChainDefinitionMap(filterRuleMap);

一眼看过去好像没什么问题,但是就是不走自定义的jwt过滤器,所以判断问题一定出在这里,经过打断点后,发现filterRuleMap中的”/**”没有jwt这条,居然是下面的这个anon这个,那就没啥问题了

总结

anon的匿名的缩写,走的是shiro的默认过滤器,默认放行接口,因为前面是/**,因此会放行所有接口,不走我们的过滤器,删除这行后,接口正常走过滤器