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的过滤器链配置和相关概念后,根据项目实际情况进行定制化开发。
解决 无用评论 打赏 举报
悬赏问题
- ¥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 位置函数报错?