springboot集成shiro时循环重定向的问题

问题说明

springboot集成shiro后,过滤器配置为/**时,接口循环重定向

配置

    @Bean
    public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(securityManager);

        // 添加自定义过滤器,注意这个Filter继承javax.servlet.Filter
        Map<String, Filter> filterMap = new HashMap<>();
        filterMap.put("cas", this.casFilter());
        filterMap.put("roles", this.roleFilter());
        shiroFilterFactoryBean.setFilters(filterMap);
        // 拦截器
        LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
        filterChainDefinitionMap.put(Constants.WEB_SHIRO_AUTH_URL, "cas");
        filterChainDefinitionMap.put("/sso/**", "anon");
        
        // 如果不设置默认会自动寻找Web工程根目录下的"/login"页面
        shiroFilterFactoryBean.setLoginUrl("/sso/login");

        // 登录成功后要跳转的链接
        shiroFilterFactoryBean.setSuccessUrl("/sso/success");
        shiroFilterFactoryBean.setUnauthorizedUrl("/sso/unAuthorize");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);

        return shiroFilterFactoryBean;
    }

原因

自定义的filter被系统启动加载为系统过滤器,而不是shiro的过滤器

解决方案

    @Bean
    public FilterRegistrationBean registration(RolesAuthorizationFilter filter) {
        FilterRegistrationBean registration = new FilterRegistrationBean(filter);
        // 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理
        registration.setEnabled(false);
        return registration;
    }

 

### Apache Shiro 框架介绍 Apache Shiro 是一款强大而灵活的 Java 安全框架,提供了一套全面的安全性解决方案[^1]。该框架旨在简化应用程序中的认证、授权、加密和会话管理等功能。 #### 主要特性 - **简单易用**: API 设计直观,易于理解和集成到现有项目中。 - **灵活性高**: 支持多种数据源(如 JDBC、LDAP),并允许自定义实现。 - **模块化设计**: 可单独使用所需组件而不必引入整个库。 - **社区支持良好**: 拥有活跃的开发者群体,在遇到问题可以获得及帮助[^2]。 ### 使用教程 为了开始使用 Apache Shiro,首先需要将其加入项目的依赖列表中。对于采用 Gradle 构建工具的项目来说,可以在 `build.gradle` 文件内添加如下语句来声明所需的版本: ```groovy implementation 'org.apache.shiro:shiro-core:1.8.0' ``` 完成上述操作之后,则可以着手编写具体的业务逻辑代码了。下面是一个简单的例子展示如何利用 ini 配置文件来进行用户身份验证与权限控制设置[^3]。 假设存在两个用户名分别为 ZhangSan 和 LiSi 的测试账户,并赋予它们不同的角色权限;此可在 shiro.ini 中按照下述方式指定这些信息: ```ini [users] zhangsan=z3,role1,role2 lisi=l4 ``` 此段配置意味着当有人尝试登录名为 "ZhangSan" 或者 "LiSi" 的账号,如果输入正确的密码 (即 z3 或 l4),那么他们将会被分配相应的角色标签 role1 或 role2[^4]。 通过这种方式,开发人员能够快速搭建起基于角色访问控制系统的基础架构,从而更好地保护应用资源免受未授权行为的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值