一尘不染

在spring自动将安全标志添加到JSESSIONID cookie

spring-mvc

我有一个在nginx之后的tomcat应用程序服务器。SSL在nginx上终止。部署在tomcat上的Spring web-
mvc应用程序应在JSESSIONID上设置安全标志。如果spring对此具有某种自动检测功能,那就太酷了,因为我那里没有SSL,因此我在开发过程中不会感到烦恼。

有没有办法告诉spring自动设置标志?

我使用JavaConfig设置应用程序,并使用Maven创建可部署的war-file。


阅读 604

收藏
2020-06-01

共1个答案

一尘不染

当您使用spring-session,例如将会话保留在reddis中时,这确实是自动完成的。该cookie比创建通过org.springframework.session.web.http.CookieHttpSessionStrategy在其中CookieHttpSessionStrategy#createSessionCookie检查是否请求来自通过HTTPS和集相应地确保:

sessionCookie.setSecure(request.isSecure());

如果您 使用spring-session,则可以使用来配置安全cookie
ServletContextInitializer。使用application属性,根据配置文件将其设置为true / false。

@Bean
public ServletContextInitializer servletContextInitializer(@Value("${secure.cookie}") boolean secure) {
    return new ServletContextInitializer() {

        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            servletContext.getSessionCookieConfig().setSecure(secure);
        }
    };
}

application.properties(在配置文件“ prod”未激活时在dev中使用):

secure.cookie=false

application-prod.properties(仅在配置文件“
prod”处于活动状态时使用,会覆盖application.properties中的值):

secure.cookie=false

使用以下命令在生产服务器上启动应用程序:

--spring.profiles.active=prod

到目前为止,如果您尚未使用配置文件,这听起来似乎需要付出一定的努力,但是无论如何,您仍然很可能需要针对产品环境的配置文件,因此它确实值得。

2020-06-01