前言:
通常情况下,系统登录成功之后会进入指定的页面,比如说系统首页。但是有时候会根据项目的需求进行调整,比如:给用户一个url,如果用户是第一次在浏览器中输入这个url,那么会要求先进行登录,登录成功之后再进入之歌url指定的页面,此时是用shiro实现的登录验证,那么我们就要从shiro中的SavedRequest取出登录之前的url。
思路:
拿我现在正在做的停车场系统为例:
首先在登录接口中获取到登录前的地址url;
SysLoginController
SavedRequest savedRequest = (SavedRequest)SecurityUtils.getSubject().getSession().getAttribute(“shiroSavedRequest”);
String requestUrl = savedRequest.getRequestUrl();
mmap.put(“requestUrl”, requestUrl);–mmap是ModelMap
然后需要在登录页面中写一个属性为hidden的input文本框,input文本框的值是从登录接口中取的;
login.html
<input type="hidden" id="requestUrl" name="requestUrl" th:value="${requestUrl}"/>
接着首页index的接口中需要取到input文本框的值,然后进行判断,要是满足条件的话则直接跳转到相应的页面;
SysIndexController
String requestUrl = request.getParameter(“requestUrl”);
if(StringUtils.isNotNull(requestUrl) && requestUrl.contains(“gatePort”)) {
System.out.println(requestUrl);
resp.sendRedirect(requestUrl);
}
最后在登录的js中写页面的跳转location.href=…,此时需要获取input文本框中的值作为页面跳转的参数。
login.js
location.href = ctx + ‘index?requestUrl=’+$("#requestUrl").val();
可以参考的文章:
https://www.iteye.com/blog/panyongzheng-2262919
https://blog.csdn.net/chen_bo526/article/details/106136303
https://blog.csdn.net/duan196_118/article/details/105179421?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-3