一只会敲代码的小灰灰 2023-08-24 15:37 采纳率: 37.5%
浏览 6
已结题

springboot2+shiro访问无授权url时,不想被shiro强制登出

springboot2+shiro访问无授权url时,会被shiro强制登出,但是我想要跳转到指定页面,并且不退出登录,这个怎么实现啊?

  • 写回答

2条回答 默认 最新

  • Weixin 小晨 2023-08-24 15:52
    关注

    要实现在访问无授权的URL时跳转到指定页面并且不退出登录,您可以进行以下步骤:

    在Shiro的配置文件中,找到对应的过滤器链配置(可能是shiroFilterFactoryBean或DefaultFilterChainManager),添加一个自定义的过滤器。

    创建一个自定义过滤器类,继承Shiro原有的过滤器(如UserFilter),并重写onAccessDenied方法。在该方法中,实现跳转到指定页面的逻辑,而不是强制登出。

    示例代码如下:

    
    public class CustomUserFilter extends UserFilter {
    
        @Override
        protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
            Subject subject = getSubject(request, response);
            if (subject.getPrincipal() == null) {
                // 用户未登录的处理逻辑,可以根据需求进行跳转到登录页面或其他指定页面
                WebUtils.issueRedirect(request, response, "/custom-page");
            } else {
                // 用户已登录但无权限访问的处理逻辑,可以根据需求进行跳转到指定页面
                WebUtils.issueRedirect(request, response, "/unauthorized-page");
            }
            return false;
        }
    }
    

    在Shiro的过滤器链配置中,将原有的user过滤器替换为自定义的过滤器。例如,在Spring Boot的配置类中,可以使用addFilterChainDefinition方法配置过滤器链,示例如下:

    
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean() {
        // ...其他配置...
    
        // 获取过滤器链定义
        Map<String, String> filterChainDefinitionMap = shiroFilterFactoryBean.getFilterChainDefinitionMap();
      
        // 替换原有的user过滤器为自定义过滤器
        filterChainDefinitionMap.put("user", "customUserFilter");
    
        // ...其他配置...
        
        return shiroFilterFactoryBean;
    }
    

    请注意,以上代码仅为示例,具体的配置可能因您的项目架构和需求而有所不同。建议理解Shiro的过滤器链配置和相关概念后,根据项目实际情况进行定制化开发。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月25日
  • 创建了问题 8月24日

悬赏问题

  • ¥15 安装python过程失败怎么解决?
  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?