//设置控制map
Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();
//配置不会被拦截的链接 顺序判断
// filterChainDefinitionMap.put("/static/sss.xml","authc");
//配置退出,过滤器,其中的具体的退出代码Shiro已经以我们实现了
// filterChainDefinitionMap.put("/logout","logout");
filterChainDefinitionMap.put("/user/*","authc");
//特别注意,过滤链定义,从上向下顺序执行,一般讲/**放在最边,这是一个坑呢,一不小心代码就不好使了
//所有的url都必须认证通过后才可以访问,anon所有url都可以匿名访问
// filterChainDefinitionMap.put("/**","annon")
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
未解决。。。
查看源码,manager.createChain(url, chainDefinition);
最终以url的形式被FilterChainManager 收录,但是我看别人的代码明明可以实现路径拦截的
原来shiro只可以根据url进行拦截,而不能根据目录进行拦截 如有异议还请留言(我也在想一个问题,如果既可以根据目录进行拦截也可以根据url进行拦截那很容易造成冲突,语言不准确造成我找了半天没找到答案)
protected FilterChainManager createFilterChainManager() {
DefaultFilterChainManager manager = new DefaultFilterChainManager();
Map<String, Filter> defaultFilters = manager.getFilters();
Iterator var3 = defaultFilters.values().iterator();
while(var3.hasNext()) {
Filter filter = (Filter)var3.next();
this.applyGlobalPropertiesIfNecessary(filter);
}
Map<String, Filter> filters = this.getFilters();
String name;
Filter filter;
if (!CollectionUtils.isEmpty(filters)) {
for(Iterator var10 = filters.entrySet().iterator(); var10.hasNext(); manager.addFilter(name, filter, false)) {
Entry<String, Filter> entry = (Entry)var10.next();
name = (String)entry.getKey();
filter = (Filter)entry.getValue();
this.applyGlobalPropertiesIfNecessary(filter);
if (filter instanceof Nameable) {
((Nameable)filter).setName(name);
}
}
}
Map<String, String> chains = this.getFilterChainDefinitionMap();
if (!CollectionUtils.isEmpty(chains)) {
Iterator var12 = chains.entrySet().iterator();
while(var12.hasNext()) {
Entry<String, String> entry = (Entry)var12.next();
String url = (String)entry.getKey();
String chainDefinition = (String)entry.getValue();
manager.createChain(url, chainDefinition);
}
}
return manager;
}