从您提供的截图来看,可能是因为您在 Shiro 配置文件中配置了多个过滤器链,而且没有指定具体的过滤器链来处理请求,导致 Shiro 无法正确判断请求应该经过哪个过滤器链。
您可以尝试在 Shiro 配置文件中指定具体的过滤器链来解决这个问题。具体操作步骤如下:
[urls]
/login = anon
/logout = logout
/** = authcBasic[role1], authc[role2]
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 指定过滤器链
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/**", "authcBasic[role1], authc[role2]");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
在上面的代码中,我们通过 ShiroFilterFactoryBean.setFilterChainDefinitionMap 方法指定了过滤器链,其中 key 表示请求路径,value 表示过滤器链名称。这样就可以确保请求会被正确地路由到对应的过滤器链中,从而解决您遇到的问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。