今天在整合shiro的时候发现,在shiro的过滤器里面配置未授权的跳转页面是无效的
<property name="unauthorizedUrl" value="/unauthorized.jsp"></property>
解决方案1
需要在springMVC的配置文件配置异常的映射解析器。当出现某个异常时跳转到相应的页面。比如下面第一个未授权的异常就跳转到你配置的视图解析器前缀+unauthorized+后缀
一般都是/WEB-INF/view/unauthorized.jsp
<!-- 异常处理 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="org.apache.shiro.authz.UnauthorizedException">unauthorized</prop>
<prop key="org.apache.shiro.authz.UnauthenticatedException">jsp/unauthorized</prop>
<prop key="org.apache.shiro.authz.AuthorizationException">jsp/unauthorized</prop>
<prop key="java.lang.Throwable">jsp/unauthorized</prop>
</props>
</property>
</bean>
解决方案2
编写controller的全局异常监控,监控unauthorized未授权的异常。我这里是直接返回一个jason对象
ResultObj这个类是自己写的。根据需要返回什么什么自己选择
public static final ResultObj UNAUTHORIZED = new ResultObj("405", "未授权");
@RestControllerAdvice
public class GlobalExceptionHanderAdvise {
/**
* 未授权
* 只要当前项目的代码抛出UnauthorizedException就会回调
*/
@ExceptionHandler(value= {UnauthorizedException.class})
public ResultObj unauthorized() {
return ResultObj.UNAUTHORIZED;
}
}
注意:这两种方式如果同时配置的话,起作用的是第二种方式。这两种方式都是在使用shiro注解开发的时候才需要用到。如果直接使用jsp或者thymeleaf的标签俩判断是否有权限,就不会抛出异常,因为用了标签,有权限就直接显示,没权限就不显示。