关于解决SpringBoot中使用redirect重定向后,页面跳转后ulr地址后面出现jsessionid=xxxxxxx的问题

关于解决SpringBoot中使用redirect重定向后,页面跳转后ulr地址后面出现jsessionid=xxxx的问题

参考链接: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。
如下图:
jsessionid
这样复制这个url去ie中就不需要再登录,相对来说不合理。
于是在网上找资料研究怎么回事。
首先找到一个解决方法为在application.yml中添加配置,配置代码如下

  session:
    tracking-modes: cookie
    cookie:
      http-only: true

如图
关于解决SpringBoot中使用redirect重定向后,页面跳转后ulr地址后面出现jsessionid=xxxxxxx的问题_第1张图片
但是在我这里没有起到作用

然后又找到一个解决方法是为启动类继承 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);
    }
}

如下图
关于解决SpringBoot中使用redirect重定向后,页面跳转后ulr地址后面出现jsessionid=xxxxxxx的问题_第2张图片
但是在我这里还是没有起到作用

最后找到一个起作用的解决方法。
就是不通过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";
        }
    }

如图:
关于解决SpringBoot中使用redirect重定向后,页面跳转后ulr地址后面出现jsessionid=xxxxxxx的问题_第3张图片
如图所示,成功解决
解决

.
.
.
.
.
感谢阅读,有不足之处欢迎指出,共同探讨

你可能感兴趣的:(开发中遇到的小问题,session,java,spring,boot,shiro,cookie)