关于解决SpringBoot中使用redirect重定向后,页面跳转后ulr地址后面出现jsessionid=xxxx的问题
参考链接:/zshake/article/details/37658147
在controller中,做了一个简单的登录判断,判断完成后使用redirect重定向到另一个页面
原本代码如下:
@PostMapping("/login")public String main(String userName, String password, HttpSession session, Model model){if ("admin".equals(userName) && "admin".equals(password)){//把登录成功的用户保存起来session.setAttribute("username",userName);session.setAttribute("password",password);//登录成功重定向到main.htmlreturn "redirect:main.html";}else {model.addAttribute("msg","账号密码错误");return "redirect:login";}}
但是这样重定向的话,每次跳转到main.html页面时,url后都会跟一串 jsessionid=DE019BAFC91CB3A36A457EAF6AE2A5CE。
如下图:
这样复制这个url去ie中就不需要再登录,相对来说不合理。
于是在网上找资料研究怎么回事。
首先找到一个解决方法为在application.yml中添加配置,配置代码如下
session:tracking-modes: cookiecookie:http-only: true
如图
但是在我这里没有起到作用
然后又找到一个解决方法是为启动类继承SpringBootServletInitializer类,然后重写onStartup方法
代码如下:
public class BigScreenApplication extends SpringBootServletInitializer {//去除url中含有的JSESSIONID@Overridepublic void onStartup(ServletContext servletContext) throws ServletException {super.onStartup(servletContext);servletContext.setSessionTrackingModes(Collections.singleton(SessionTrackingMode.COOKIE));SessionCookieConfig sessionCookieConfig = servletContext.getSessionCookieConfig();sessionCookieConfig.setHttpOnly(true);}public static void main(String[] args) {SpringApplication.run(BigScreenApplication.class, args);}}
如下图
但是在我这里还是没有起到作用
最后找到一个起作用的解决方法。
就是不通过Spring MVC的redirect做重定向,自己直接调用**response.sendRedirect()**方法来实现
代码如下:
@PostMapping("/login")public String main(String userName, String password, HttpSession session, Model model, HttpServletResponse response) throws IOException {if ("admin".equals(userName) && "admin".equals(password)){//把登录成功的用户保存起来session.setAttribute("username",userName);session.setAttribute("password",password);//登录成功重定向到main.htmlresponse.sendRedirect("/main.html");return null;}else {model.addAttribute("msg","账号密码错误");return "redirect:login";}}
如图:
如图所示,成功解决
.
.
.
.
.
感谢阅读,有不足之处欢迎指出,共同探讨