2015-08-03 2 views
1

Как удалить jsessionid из моих URL?Spring Boot: удалить jsessionid из url

Я использую Spring Boot MVC (без Spring Security, встроенный tomcat).

Я читал, что это можно сделать, установив disableUrlRewriting в "true". Но это похоже на решение Spring Security, которое я не использую (это простой проект без входа в систему, просто страницы, контроллер сеанса существует и должен быть сессионным контроллером).

Я спрашиваю об этом, потому что GoogleBot создает URL-адреса, содержащие идентификатор.

EDIT: Я решил ее с решением, описанным в: https://randomcoder.org/articles/jsessionid-considered-harmful

ответ

0

Я создал быстрое и грязное приложение весны-загрузку, и вот что я придумал.

ServletInitializer, который генерируется, вы можете изменить его таким образом:

package com.division6.bootr; 

import java.util.Collections; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.SessionCookieConfig; 
import javax.servlet.SessionTrackingMode; 

import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.context.web.SpringBootServletInitializer; 

public class ServletInitializer extends SpringBootServletInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     // This can be done here or as the last step in the method 
     // Doing it in this order will initialize the Spring 
     // Framework first, doing it as last step will initialize 
     // the Spring Framework after the Servlet configuration is 
     // established 
     super.onStartup(servletContext); 

     // This will set to use COOKIE only 
     servletContext 
      .setSessionTrackingModes(
       Collections.singleton(SessionTrackingMode.COOKIE) 
     ); 
     // This will prevent any JS on the page from accessing the 
     // cookie - it will only be used/accessed by the HTTP transport 
     // mechanism in use 
     SessionCookieConfig sessionCookieConfig= 
       servletContext.getSessionCookieConfig(); 
     sessionCookieConfig.setHttpOnly(true); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(SpringBootrApplication.class); 
    } 

} 
2

вы также можете попробовать это,

 @Bean 
      public ServletContextInitializer servletContextInitializer() { 
       return new ServletContextInitializer() { 

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

     } 
3

Поскольку этот вопрос находится в контексте загрузки яровой, простое решение для me was:

server: 
    session: 
    tracking-modes: cookie 

Добавлено в appication.yml изменяет встроенную конфигурацию tomcat. Из перечня характеристик пружинных пружин: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties

Смежные вопросы