Springboot集成Shiro重定向login.jsp

问题

在简单配置 shiro 相关配置后,浏览器请求/index进入到login.html页面,打开F12后发现console中报错,多次重定向login.js页面。但login.jsp文件不存在,而且springboot默认前台模板是thymleaf,不支持jsp

问题查找

想着可能是自己在配置时出现了问题,多次查对外加重建项目,将问题点锁定到shiro配置中。通过百度找到loginUrl,这个问题字段。

解析

  1. loginUrl 字段:用于认证用户时,重定向的路径。认证失败,session过期后走的路径。
  2. AccessControlFilter 类中,可以看到重定向方法
/** * Convenience method for subclasses that merely acquires the {@link #getLoginUrl() getLoginUrl} and redirects * the request to that url. * <p/> * <b>N.B.</b> If you want to issue a redirect with the intention of allowing the user to then return to their * originally requested URL, don't use this method directly. Instead you should call * {@link #saveRequestAndRedirectToLogin(javax.servlet.ServletRequest, javax.servlet.ServletResponse) * saveRequestAndRedirectToLogin(request,response)}, which will save the current request state so that it can * be reconstructed and re-used after a successful login. * * @param request the incoming <code>ServletRequest</code> * @param response the outgoing <code>ServletResponse</code> * @throws IOException if an error occurs. */ protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException { String loginUrl = getLoginUrl(); WebUtils.issueRedirect(request, response, loginUrl); }
  1. 根据文档提示,如果session 等情况需要重新登录,登录成功后,会继续之前的操作。
    image

  2. 所以,我们怎么改?

shiro.loginUril=/index

第一点: 实际loginUril 的请求路径是ip:port/projectname/loginUrl。但有时登录页面文件存在在无法访问的文件夹内。简单改为/login.html 不可取。
第二点: loginUrl请求逻辑,是当前请求是否认证成功。即便设置了chainDefinition.addPathDefinition("/index", "anon");,请求可以进入到 controller,但数据返回时,同样会认证用户,失败后也会走loginUrl。
第三点: 配置了/index,相当于配置了系统的登录入口。


另辟蹊径:
可以重写 redirectToLogin()来达到,不重定向的效果。百度查查吧,有文章,就不加连接了。


__EOF__

本文作者之士咖啡
本文链接https://www.cnblogs.com/zz-1q/p/16406908.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   之士咖啡  阅读(894)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示