Spring Mvc boot解決靜態url帶jsessionid問題

1.jsessionid是什麼?

   Jsessionid只是tomcat的對sessionid的叫法,其實就是sessionid;在其它的容器也許就不叫jsessionid了。java

2.那麼有什麼問題?

    首先這是一個保險措施 由於Session默認是須要Cookie支持的,但有些客戶瀏覽器是關閉Cookie的,因此在這個時候就須要在URL中指定服務器上的session標識,也就是EDE802AB96CD1E0CA2AFB3830D18FB10,每當用戶第一次訪問頁面的時候,後端獲取的地址是包含 jsessionid參數,這樣拼接 靜態資源或者A標籤或Form的地址的時候,連接就變成了:web

http://localhost:8080?jsessionid=EDE802AB96CD1E0CA2AFB3830D18FB10home/user 形成訪問相關頁面404.spring

3.解決方法

web.xml配置後端

<session-config>
    <tracking-mode>COOKIE</tracking-mode>
    <tracking-mode>URL</tracking-mode>
    <tracking-mode>SSL</tracking-mode>
</session-config>

   以上是Servlet3.0最會話跟蹤的三個方式,Servlet 3.0規範實施前tomcat的會話跟蹤用兩種方法:COOKIE和帶JSESSIONID參數的重寫URL。 在 Tomcat 7中的URL重寫方法再也不是強制性的,並加入一個新的會話跟蹤方法基於SSL會話。瀏覽器

移除<tracking-mode>URL</tracking-mode> 就解決了jsessionid的問題。tomcat

spring boot三種方式springboot

   1.啓動類 繼承 SpringBootServletInitializer 重寫onStartup方法  服務器

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
servletContext.setSessionTrackingModes(Collections.singleton(SessionTrackingMode.COOKIE));
SessionCookieConfig sessionCookieConfig=servletContext.getSessionCookieConfig();
sessionCookieConfig.setHttpOnly(true);
}

   2.在@Configuration配置類上註冊beansession

@Bean
public ServletContextInitializer servletContextInitializer1() {
    return new ServletContextInitializer() {
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            servletContext.setSessionTrackingModes(Collections.singleton(SessionTrackingMode.COOKIE) );
        }
    };
}

 3.在springboot  properties配置ide

server.session.tracking-modes=

  博客地址:http://my.oschina.net/wangnian

相關文章
相關標籤/搜索