4

我正在设置一个完全基于 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[]{"/"};
    }

@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>
4

5 回答 5

11

你可以像下面那样做

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

    }

}
于 2013-04-28T12:37:34.300 回答
7

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

在您的application.properties添加中:

server.session.tracking-modes=cookie

或者,如果您使用application.yml

server:
  session:
    tracking-modes: 'cookie'

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

于 2018-04-30T12:37:22.363 回答
3

从 3.2.0.RC1 开始,它可以AbstractSecurityWebApplicationInitializer像这样使用:

public class WebSecutityInit extends AbstractSecurityWebApplicationInitializer {

    @Override
    protected Set<SessionTrackingMode> getSessionTrackingModes() {
        return EnumSet.of(SessionTrackingMode.SSL);
    }
}
于 2014-07-25T13:15:04.820 回答
0

另一个对我有用的解决方案是 SecurityConfig 类中的以下代码。

@Override
protected void configure(HttpSecurity http) throws Exception {    
 http.httpBasic()
  .and()
  .sessionManagement()
  .sessionCreationPolicy(SessionCreationPolicy.STATELESS) //No sessionId eppended  
  ...
}
于 2019-04-04T12:39:36.720 回答
0

spring boot 2.4.0及更高版本开始,应用程序属性被重命名为 server。servlet .session.tracking-modes。

所以,在application.properties中,需要添加

server.servlet.session.tracking-modes="cookie"

如果使用 application.yml,需要有

server:
    servlet:
        session:
            tracking-modes: cookie
于 2021-02-25T16:39:24.023 回答