shiro判定无权限后跳转页面失效

来源:互联网 发布:js创建html表格 编辑:程序博客网 时间:2024/06/06 03:39

<!-- 通过unauthorizedUrl指定没有权限操作时跳转页面 --><property name="unauthorizedUrl" value="/permission/nopermission.action" />

配置了,但是却没有跳转到无权限的指定控制器或者页面,究其原因如下,先post一个源码:

复制代码
 private void applyUnauthorizedUrlIfNecessary(Filter filter) {        String unauthorizedUrl = this.getUnauthorizedUrl();        if(StringUtils.hasText(unauthorizedUrl) && filter instanceof AuthorizationFilter) {            AuthorizationFilter authzFilter = (AuthorizationFilter)filter;            String existingUnauthorizedUrl = authzFilter.getUnauthorizedUrl();            if(existingUnauthorizedUrl == null) {                authzFilter.setUnauthorizedUrl(unauthorizedUrl);            }        }    }
复制代码

注意,这里要apply这个url必须满足两个条件,即不为空,并且filter是AuthorizationFilter,然后,只有perms,roles,ssl,rest,port才是属于AuthorizationFilter,而anon,authcBasic,auchc,user是AuthenticationFilter,所以unauthorizedUrl设置后页面不跳转

以上都是直接复制粘贴别人的过来的,下面我们来说解决方法。


解决方法:

自定义异常,判断为UnauthorizedException之后跳转页面


自定义异常类:

public class MyExceptionResolver implements HandlerExceptionResolver {    @Override    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {        // TODO Auto-generated method stub        System.out.println("==============异常开始=============");        //如果是shiro无权操作,因为shiro 在操作auno等一部分不进行转发至无权限url        if(e instanceof UnauthorizedException){            ModelAndView mv = new ModelAndView("/error/nopermission");            return mv;        }        e.printStackTrace();        System.out.println("==============异常结束=============");        ModelAndView mv = new ModelAndView("error");        System.out.println(e.toString().replaceAll("\n", "<br/>"));        mv.addObject("exception", e.toString().replaceAll("\n", "<br/>"));        return mv;    }
在springmvc.xml中配置

<!-- 通过unauthorizedUrl指定没有权限操作时跳转页面 --><property name="unauthorizedUrl" value="/permission/nopermission.action" />
 
原创粉丝点击