Shiro中setUnauthorizedUrl("/403")不生效,无法跳转指定页面的解决办法。

Shiro中setUnauthorizedUrl"/403"不生效,无法跳转指定页面的解决办法

问题描述

ShiroConfig中设置未授权页面统一跳转403页面,但是没有权限的用户访问时,并未跳转指定页面,页面报错信息如下:
error
控制台报错如下:
console

问题分析

这是因为shiro源代码中判断了filter是否为AuthorizationFilter,只有perms,roles,ssl,rest,port才是属于AuthorizationFilter,而anon,authcBasic,auchc,user是AuthenticationFilter,所以unauthorizedUrl设置后不起作用。

解决办法

定义一个全局异常捕获类

/**
 * @Title GlobalExceptionHandler.java
 * @description 用于解决shiroFilterFactoryBean.setUnauthorizedUrl("/403");不生效的问题
 * @time 2020年1月8日 上午11:13:30
 * @author wuguodong
 **/

/**
 * @ControllerAdvice注解的作用:是一个Controller增强器,可对controller中被@RequestMapping注解的方法加一些逻辑处理,最常用的就是异常处理;【三种使用场景】全局异常处理。全局数据绑定,全局数据预处理
 * @Order 注解@Order或者接口Ordered的作用是定义SpringIOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响;
 * @ExceptionHandler 统一异常处理
 * 
 */
@ControllerAdvice
@Order(value = Ordered.HIGHEST_PRECEDENCE)
public class GlobalExceptionHandler {
	@ExceptionHandler(value = AuthorizationException.class)
	public String handleAuthorizationException() {
		return "403";
	}
}
原创文章 23 获赞 11 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_40777510/article/details/103888945