복붙노트

[SPRING] web.xml을 사용하지 않고 추적 모드를 쿠키로 설정하여 추가 된 세션 ID를 제거합니다.

SPRING

web.xml을 사용하지 않고 추적 모드를 쿠키로 설정하여 추가 된 세션 ID를 제거합니다.

나는 아무 XML 구성없이 완전히 자바 기반 스프링 애플 리케이션을 설정하고있다 :

public class WebApp extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{WebMvcConfigurer.class};
    }
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { mypackages })
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/static-assets/");
    }

    @Bean
    public ViewResolver viewResolver() {

        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

내 web.xml에 있던이 자료는 어디에 두어야하나요?

 <session-config>
        <!-- Disables URL-based sessions (no more 'jsessionid' in the URL using Tomcat) -->
        <tracking-mode>COOKIE</tracking-mode>
    </session-config>

해결법

  1. ==============================

    1.당신은 아래와 같이 할 수 있습니다.

    당신은 아래와 같이 할 수 있습니다.

    public class WebConfig implements WebApplicationInitializer {
    
        @Override
        public void onStartup(ServletContext servletContext)
                throws ServletException {
            HashSet<SessionTrackingMode> set = new HashSet<SessionTrackingMode>();
            set.add(SessionTrackingMode.COOKIE);
            servletContext.setSessionTrackingModes(set);
    
        }
    
    }
    
  2. ==============================

    2.3.2.0.RC1부터 AbstractSecurityWebApplicationInitializer에서 다음과 같이 사용할 수 있습니다.

    3.2.0.RC1부터 AbstractSecurityWebApplicationInitializer에서 다음과 같이 사용할 수 있습니다.

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

    3.Spring Boot 응용 프로그램에서는 server.session.tracking-modes 응용 프로그램 속성을 사용하여 모드를 구성 할 수 있습니다.

    Spring Boot 응용 프로그램에서는 server.session.tracking-modes 응용 프로그램 속성을 사용하여 모드를 구성 할 수 있습니다.

    application.properties 파일에 다음을 추가하십시오.

    server.session.tracking-modes=cookie
    

    또는 application.yml을 사용하는 경우 :

    server:
      session:
        tracking-modes: 'cookie'
    

    스프링 부트 자동 설정은 Bassem이 그의 대답에서 추천 한 servletContext.setSessionTrackingModes와 동일한 호출을 내부적으로 사용합니다.

  4. ==============================

    4.나에게 맞는 또 다른 솔루션은 SecurityConfig 클래스 내부의 코드입니다.

    나에게 맞는 또 다른 솔루션은 SecurityConfig 클래스 내부의 코드입니다.

    @Override
    protected void configure(HttpSecurity http) throws Exception {    
     http.httpBasic()
      .and()
      .sessionManagement()
      .sessionCreationPolicy(SessionCreationPolicy.STATELESS) //No sessionId eppended  
      ...
    }
    
  5. from https://stackoverflow.com/questions/16262285/set-tracking-mode-to-cookie-to-remove-appended-session-id-without-using-web-xml by cc-by-sa and MIT license