web-dev-qa-db-ja.com

SpringブートでCookieドメインとパスを設定する方法

Tomcatでは、次のように実行できます。

<Context useHttpOnly="true" sessionCookiePath="/"sessionCookieDomain=".XXXX.com"/>

第2レベルドメインのCookieをSpring Bootと共有したいのですが、どうすればよいですか?

8
zhe zhu

Spring Bootが埋め込むサーバーの設定は、アプリケーションプロパティとして使用できます( ここにリストされています セクション# EMBEDDED SERVER CONFIGURATIONおよび名前空間server.servlet.session.cookie.*の下)。

上記のTomcat構成に相当するものは次のとおりです。

# properties in /src/resources/application.properties
server.servlet.session.cookie.domain=.XXXX.com
server.servlet.session.cookie.http-only=true
server.servlet.session.cookie.path=/
12
sthzg

(これは、この記事の執筆時点のSpring 1.5.xに適用されます)

@ radrocket81の返信に追加するためのコード例を以下に示します。また、これは、SpringブートCookieのmax-ageおよびその他のプロパティを設定する方法です@EnableRedisHttpSessionによってRedisセッションを有効にした場合アプリケーションプロパティserver.sessionは適用されません。

@Bean
public <S extends ExpiringSession> SessionRepositoryFilter<? extends ExpiringSession> springSessionRepositoryFilter(SessionRepository<S> sessionRepository, ServletContext servletContext) {
    SessionRepositoryFilter<S> sessionRepositoryFilter = new SessionRepositoryFilter<S>(sessionRepository);
    sessionRepositoryFilter.setServletContext(servletContext);
    CookieHttpSessionStrategy httpSessionStrategy = new CookieHttpSessionStrategy();
    httpSessionStrategy.setCookieSerializer(this.cookieSerializer());
    sessionRepositoryFilter.setHttpSessionStrategy(httpSessionStrategy);
    return sessionRepositoryFilter;
}

private CookieSerializer cookieSerializer() {
    DefaultCookieSerializer serializer = new DefaultCookieSerializer();
    serializer.setCookieName("CUSTOM_SESSION_KEY");
    serializer.setDomainName("domain.com");
    serializer.setCookiePath("/");
    serializer.setCookieMaxAge(10); //Set the cookie max age in seconds, e.g. 10 seconds
    return serializer;
}
1
EwyynTomato

私の解決策は、CookieSerializer Beanを定義し、私のセットアップに適合するドメインパターンを提供することでした。

このように: 春のセッション-カスタムCookie

0
radrocket81