使用springboot+shiro框架对controller中方法进行鉴权时, 在shiro配置文件中设置如下内容不起作用
// 鉴权页面,认证不通过跳转
shiroFilterFactoryBean.setUnauthorizedUrl("/error403");
这里配置了当用户没有权限访问时, 跳转到error403界面, 但是我现在就是想要的是, 当用户没有权限访问时, 跳转到一个我自定义的url里, 在里面我需要进行一些操作, 以及返回一些自定义的数据, 那么这个设置就是没有作用的, 解决方案如下:
新建一个异常拦截类, 用于拦截用户没有权限时, 执行响应的代码
import com.demo.utils.ResultJSON;
import com.demo.utils.SlfUtils;
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 ResultJSON handleShiroException(Exception ex) {
//自定义的记录日志方法
SlfUtils.getInst(this).error(0, "访问了无权限目录");
//自定义的返回对象
return ResultJSON.error("无权限操作");
}
@ResponseBody
@ExceptionHandler(AuthorizationException.class)
public String AuthorizationException(Exception ex) {
return "权限认证失败";
}
}
这时再进行响应的访问, 就会拦截用户的请求, 并返回"无权限操作"
至此, 问题完美解决!