我有一个 Spring Boot 1.5 应用程序,我在 pom.xml 中添加了 Spring-Session。我正在实例化
CookieSerializer
类的 2 个实例,以满足我自己在配置类中的需要。
但是当应用程序启动时,我收到以下错误消息:
Parameter 0 of method setCookieSerializer in org.springframework.session.config.annotation.web.http.SpringHttpSessionConfiguration required a single bean, but 2 were found:
- authCookieSerializer: defined by method 'authCookieSerializer' in class path resource [nextgen/config/SpringHttpSessionConfig.class]
- sessionCookieSerializer: defined in BeanDefinition defined in class path resource [nextgen/config/SpringHttpSessionConfig.class]
如果我还想将
CookieSerializer
bean 用于其他用途,我该如何使用 SpringSession?我是否被迫将 CookieSerializer
定义为 @Primary
bean 只是为了自动装配到 SpringSession 配置类中?
我的配置类:
@Configuration
public class SpringHttpSessionConfig {
private Logger logger = LoggerFactory.getLogger(SpringHttpSessionConfig.class);
@Bean(name="authCookieSerializer")
public CookieSerializer authCookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setCookieName("auth");
serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
serializer.setCookiePath("/");
return serializer;
}
@Bean(name="sessionClassicCookieSerializer")
public CookieSerializer sessionCookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setCookieName("JSESSIONID");
serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
serializer.setCookiePath("/classic");
return serializer;
}
应用程序属性:
spring.session.store-type=hash-map
我遗漏了一些明显的东西吗?或者更确切地说,SpringSession 配置需要 CookieSerializer 的什么定义,以及如何在 Spring Session 配置 bean 不成为“主”bean 的情况下指定它?或者我别无选择,只能将“主要”CookieSerializer 定义为我想要注入到
SpringHttpSessionConfiguration
类中的那个?
我不确定这个答案是否是你的意思
我最近遇到了类似的问题,我的应用程序有 2 个登录页面,用于 2 个不同的用户类型,并且需要为这 2 个登录页面配置不同的会话 cookie 最大年龄。
我像你一样想到的一种方法是创建 2 个不同的 DefaultCookieSerializers 实例。然而,Spring似乎不允许这样做
幸运的是我找到了替代方案。
通过在 Spring Security 配置中注册您的自定义
AuthenticationSuccessHandler
,并在 onAuthenticationSuccess
方法中设置会话最大非活动间隔。
您可以在这里阅读更多信息:https://stackoverflow.com/a/57598611/5718493