shiroFilterFactoryBean.setLoginUrl("/login")会直接跳转到登陆页面,有时候可能让人摸不着头脑--为什么突然要我登陆了,猫饼。。
综上所述,俺决定改为在前端根据状态码(401表示未登录)提示未登录(或者失败的原因)以后再行跳转。实现的方法网上忒多,俺就不记录了,记录一下思路。
因为后端用的是shiro权限框架,所以想到自定义一个Filter,当用户没有登录的时候返回状态码和错误信息。话说其他的框架好像也是这样的?但是不知道是要继承或者实现哪一个过滤器。百度找到一个FormAuthenticationFilter表单拦截器,重写isAccessAllowed(...)和OnAccessDenied(...)方法就可以了。因为代码是复制的所以就不贴出来了(博文地址在这http://chenrd.com/detail-141.html),记录一下这两个方法的作用。
首先两个方法的返回值都是boolean,那么说明这是两个“开关”。第一个开关isAccessAllowed表示是否为允许访问的方法,在这里做一个是否已登录的判断,第二个开关onAccessDenied是当访问被拒绝时是否已经被处理了,如果需要继续处理就返回true,不需要就返回false,那么在这里把状态码添加到响应中去就可以从前端取到了。