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