参考链接:https://blog.csdn.net/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.html
return "redirect:main.html";
}else {
model.addAttribute("msg","账号密码错误");
return "redirect:login";
}
}
但是这样重定向的话,每次跳转到main.html页面时,url后都会跟一串 jsessionid=DE019BAFC91CB3A36A457EAF6AE2A5CE。
如下图:
这样复制这个url去ie中就不需要再登录,相对来说不合理。
于是在网上找资料研究怎么回事。
首先找到一个解决方法为在application.yml中添加配置,配置代码如下
session:
tracking-modes: cookie
cookie:
http-only: true
然后又找到一个解决方法是为启动类继承 SpringBootServletInitializer 类,然后重写 onStartup 方法
代码如下:
public class BigScreenApplication extends SpringBootServletInitializer {
//去除url中含有的JSESSIONID
@Override
public 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.html
response.sendRedirect("/main.html");
return null;
}else {
model.addAttribute("msg","账号密码错误");
return "redirect:login";
}
}
.
.
.
.
.
感谢阅读,有不足之处欢迎指出,共同探讨