如何定义哪个CookieSerializer被注入到SpringHttpSessionConfiguration中?

c3frrgcw  于 2023-04-09  发布在  Spring
关注(0)|答案(1)|浏览(79)

我有一个Sping Boot 1.5应用程序,我在pom.xml中添加了Spring-Session。我正在示例化CookieSerializer类的两个示例,以满足我在配置类中的需要。
但是当应用程序启动时,我收到以下错误消息:

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定义为@Primarybean,以便自动连接到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;
    }

网址:application.properties

spring.session.store-type=hash-map

我错过了什么明显的东西吗?或者更确切地说,SpringSession配置需要CookieSerializer的什么定义,以及如何在不将其作为“主”bean的情况下为SpringSession配置bean指定它?或者我别无选择,只能将“主”CookieSerializer定义为我希望注入到SpringHttpSessionConfiguration类中的CookieSerializer?

jjjwad0x

jjjwad0x1#

我不确定这个答案是不是你的意思
我最近遇到了一个类似的问题,我的应用程序有2个登录页面为2个不同的用户类型,并需要配置不同的会话cookie最大年龄为这2个登录页面。
我想到的一个方法是创建两个不同的DefaultCookieSerializers示例。然而,Spring似乎不允许这样做
幸运的是,我找到了另一种选择。
通过在spring安全配置中注册您的自定义AuthenticationSuccessHandler,并在onAuthenticationSuccess方法中设置session maximum inactive interval。
你可以在这里阅读更多:https://stackoverflow.com/a/57598611/5718493

相关问题