/**
* 读ShiroFilterFactoryBean源码可知,只有满足一下条件没有权限访问的时候才会跳转到配置的unauthorizedUrl页面
* if (StringUtils.hasText(unauthorizedUrl) && (filter instanceof AuthorizationFilter)) {
* 由于此处是认证过滤器,非授权过滤器,所以,访问没有权限时,页面会直接报错,很不友好,解决办法:加入spring异常处理
* @return
*/
@RequiresPermissions("/user/list.do")
@RequestMapping("/list.do")
public String userList() {
return "user/list";
}
异常处理配置:
package com.sniper.shiro.security.web.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
/**
* 异常统一处理,捕获异常,跳转到对应视图
* @author sniper
*
*/
public class ShiroExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
if(ex instanceof UnauthorizedException) {
return new ModelAndView("redirect:/refuse.jsp");
}
return new ModelAndView("redirect:/exception.jsp");
}
}
springmvc.xml
<bean id="exceptionResolver" class="com.sniper.shiro.security.web.interceptor.ShiroExceptionResolver"/>
本文探讨了Shiro框架在权限验证失败时的默认行为,并提供了解决方案,通过自定义异常处理来优雅地处理未授权访问,避免直接报错。同时,介绍了如何在Spring MVC中配置异常解析器,实现特定异常跳转到指定页面。

2275

被折叠的 条评论
为什么被折叠?



