import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/***
* 添加全局拦截异常!
*/
@ControllerAdvice
public class NoPermissionException {
@ResponseBody
@ExceptionHandler(UnauthorizedException.class)
public Result handleShiroException(Exception ex) {
return Result.error(CodeMsg.NOT_PERMISSIONEXCEPTION);
}
@ResponseBody
@ExceptionHandler(AuthorizationException.class)
public Result AuthorizationException(Exception ex) {
return Result.error(CodeMsg.NOT_PERMISSIONEXCEPTION);
}
}
新建一个拦截异常的类,然后使用ControllerAdvice注解来进行全局异常处理。
@ControllerAdvice ,很多初学者可能都没有听说过这个注解,实际上,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:
- 全局异常处理
- 全局数据绑定
- 全局数据预处理
@ExceptionHandler注解中可以添加参数,参数是某个异常类的class,代表这个方法专门处理该类异常,比如这样:
@ExceptionHandler(NumberFormatException.class)
public String handleExeption(Exception ex) {
System.out.println("抛异常了:" + ex);
ex.printStackTrace();
String resultStr = "异常:NumberFormatException";
return resultStr;
}
此时注解的参数是NumberFormatException.class,表示只有方法抛出NumberFormatException时,才会调用该方法