开发者社区> 问答> 正文

Java springboot 在整合shiro时,验证通过了,但是还是会走为验证时跳转的接口路径

shrio问题3.jpeg shiro问题2.jpeg

展开
收起
kpj7lfqk7qrim 2023-06-06 09:42:58 81 0
1 条回答
写回答
取消 提交回答
  • 从您提供的截图来看,可能是因为您在 Shiro 配置文件中配置了多个过滤器链,而且没有指定具体的过滤器链来处理请求,导致 Shiro 无法正确判断请求应该经过哪个过滤器链。

    您可以尝试在 Shiro 配置文件中指定具体的过滤器链来解决这个问题。具体操作步骤如下:

    1. 在 Shiro 配置文件中,定义多个过滤器链,例如:
    [urls]
    /login = anon
    /logout = logout
    /** = authcBasic[role1], authc[role2]
    
    1. 在 Spring Boot 配置文件中,通过 ShiroFilterFactoryBean 配置 Shiro 过滤器链,例如:
    @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 表示过滤器链名称。这样就可以确保请求会被正确地路由到对应的过滤器链中,从而解决您遇到的问题。

    2023-06-06 11:29:24
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载