Shiro+SpringBoot 时,anon配置的匿名路径被拦截
主要原因:配置过滤器集合时使用了HashMap
@Bean
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
//1.创建过滤器工厂
ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
//2.设置安全管理器
filterFactoryBean.setSecurityManager(securityManager);
//3.通用配置(跳转登录页面,为授权跳转的页面)
filterFactoryBean.setLoginUrl("/autherror?code=1");
filterFactoryBean.setUnauthorizedUrl("/autherror?code=2");
//4.设置过滤器集合
/**
* key :访问连接
* 支持通配符的形式
* value:过滤器类型
* shiro常用过滤器
* anno :匿名访问(表明此链接所有人可以访问)
* authc :认证后访问(表明此链接需登录认证成功之后可以访问)
*
*/
Map<String, String> filterMap = new HashMap<>();
//具有某中权限才能访问
//使用过滤器的形式配置请求地址的依赖权限
filterMap.put("/user/home", "anon");
//使用过滤器的形式配置请求地址的依赖角色
filterMap.put("/user/**", "authc");
filterFactoryBean.setFilterChainDefinitionMap(filterMap);
return filterFactoryBean;
}
正确代码如下:应该使用LinkedHashMap
@Bean
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
//1.创建过滤器工厂
ShiroFilterFactoryBean filterFactoryBean = new ShiroFilterFactoryBean();
//2.设置安全管理器
filterFactoryBean.setSecurityManager(securityManager);
//3.通用配置(跳转登录页面,为授权跳转的页面)
filterFactoryBean.setLoginUrl("/autherror?code=1");
filterFactoryBean.setUnauthorizedUrl("/autherror?code=2");
//4.设置过滤器集合
/**
* key :访问连接
* 支持通配符的形式
* value:过滤器类型
* shiro常用过滤器
* anno :匿名访问(表明此链接所有人可以访问)
* authc :认证后访问(表明此链接需登录认证成功之后可以访问)
*
*/
Map<String, String> filterMap = new LinkedHashMap<>();
//具有某中权限才能访问
//使用过滤器的形式配置请求地址的依赖权限
filterMap.put("/user/home", "anon");
//使用过滤器的形式配置请求地址的依赖角色
filterMap.put("/user/**", "authc");
filterFactoryBean.setFilterChainDefinitionMap(filterMap);
return filterFactoryBean;
}