将跟踪模式设置为cookie以删除附加的会话ID,而不使用web.xml

Nim*_*sky 1 java cookies spring spring-mvc

我正在建立一个完全基于java的spring应用程序,没有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[]{"/"};
    }
Run Code Online (Sandbox Code Playgroud)

@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;
    }
Run Code Online (Sandbox Code Playgroud)

我把它放在哪里,曾经在我的web.xml中?

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

Bas*_*hdy 9

你可以在下面这样做

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);

    }

}
Run Code Online (Sandbox Code Playgroud)

  • 使用`EnumSet.of`,这是**更有效率和习惯于在"Enum"上使用集合. (3认同)

Mic*_*och 7

在 Spring Boot 应用程序中,您可以使用应用程序属性 配置模式server.session.tracking-modes

在您application.properties添加:

server.session.tracking-modes=cookie
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用application.yml

server:
  session:
    tracking-modes: 'cookie'
Run Code Online (Sandbox Code Playgroud)

Spring Boot 自动配置在内部使用servletContext.setSessionTrackingModesBassem 在他的回答中推荐的相同调用。