问题出现:
分析:在配置了ShiroFilter之后,直接尝试在页面端访问login.jsp,但是login.jsp需要做认证过滤也就是FormAuthenticationFilter。
应为没有登录信息所以可想而知,会走ShiroFilterFactoryBean定义的loginUrl也就是认定为没有认证信息之后需要走的路径"/login"。
但是,这里这里会出现一个问题,如果在该/login控制器里没有做会话清空,FormAuthenticationFilter会默认保存会话,其结果就是,该过滤器会保存前一个浏览器中访问的URI,这种情况下默认会走上一个,而非配置的successUrl。
解释:
successUrl配置只是做为一种附加配置,
只有session中没有用户请求地址时才会使用successUrl
系统默认的是认证成功后跳转到上一次请求的路径,
如果是首次请求,那shiro就会跳转到默认虚拟路径“/”,
也就是跳转到index.jsp
解决方案:
①在index.jsp中重定向需要去的页面
②重写FormAuthenticationFilter的issueSuccessRedirect方法,并指定自定以的过滤器:(手动挡爱好者推荐)
方法内容为:
WebUtils.issueRedirect(request, response, successUrl, null, true);
③在/login控制器内清空会话,本来就是认证失败,直接暴力点把会话清除了(懒人推荐)