Java
spring

初回アクセス時にjsessionidを付与しなくする

More than 1 year has passed since last update.

servlet 3.0環境の場合、web.xmlに以下を設定する。参考:java - Is it possible to disable jsessionid in tomcat servlet? - Stack Overflow それ以前のバージョンでのやり方の例は参考のリンク先に書いてある。

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

springの場合は以下のようにする。参考:java - Set tracking mode to cookie to remove appended session id, without using web.xml - Stack Overflow

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

import org.springframework.web.WebApplicationInitializer;

public class WebMVCApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) throws ServletException {
        Set<SessionTrackingMode> s = new HashSet<>();
        s.add(SessionTrackingMode.COOKIE);
        container.setSessionTrackingModes(s);
    }
}

spring-security-webを使っている場合はAbstractSecurityWebApplicationInitializerを使うこともできる。

<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>4.2.3.RELEASE</version>
</dependency>
import java.util.EnumSet;
import java.util.Set;

import javax.servlet.SessionTrackingMode;

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

public class WebSecutityInit extends AbstractSecurityWebApplicationInitializer {
    @Override
    protected Set<SessionTrackingMode> getSessionTrackingModes() {
        return EnumSet.of(SessionTrackingMode.SSL);
    }
}