我正在设置一个完全基于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>
答案 0 :(得分:8)
你可以按照下面的方式进行
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);
}
}
答案 1 :(得分:3)
Since 3.2.0.RC1这可以在AbstractSecurityWebApplicationInitializer
中使用,如下所示:
public class WebSecutityInit extends AbstractSecurityWebApplicationInitializer {
@Override
protected Set<SessionTrackingMode> getSessionTrackingModes() {
return EnumSet.of(SessionTrackingMode.SSL);
}
}
答案 2 :(得分:2)
在Spring Boot应用中,您可以使用application property server.session.tracking-modes
配置模式。
在application.properties
添加:
server.session.tracking-modes=cookie
或者如果您使用application.yml
:
server:
session:
tracking-modes: 'cookie'
Spring Boot自动配置在内部使用与servletContext.setSessionTrackingModes
相同的调用,Bassem在his answer中建议使用该调用。
答案 3 :(得分:0)
另一个适用于我的解决方案是SecurityConfig类中的以下代码。
d <- data.frame("User id"=c(1,1,2,3,1),
block=c("north","south","east","west","south"), check.names = F)
f <- function(l, vec) {
vec[l] <- 1
vec
}
vec <- setNames(rep(0, 4), levels(d$block))
df <- aggregate(block~`User id`, d, f, vec)
答案 4 :(得分: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