我有一个在nginx之后的tomcat应用程序服务器。SSL在nginx上终止。部署在tomcat上的Spring web- mvc应用程序应在JSESSIONID上设置安全标志。如果spring对此具有某种自动检测功能,那就太酷了,因为我那里没有SSL,因此我在开发过程中不会感到烦恼。
有没有办法告诉spring自动设置标志?
我使用JavaConfig设置应用程序,并使用Maven创建可部署的war-file。
当您使用spring-session,例如将会话保留在reddis中时,这确实是自动完成的。该cookie比创建通过org.springframework.session.web.http.CookieHttpSessionStrategy在其中CookieHttpSessionStrategy#createSessionCookie检查是否请求来自通过HTTPS和集相应地确保:
org.springframework.session.web.http.CookieHttpSessionStrategy
CookieHttpSessionStrategy#createSessionCookie
sessionCookie.setSecure(request.isSecure());
如果您 不 使用spring-session,则可以使用来配置安全cookie ServletContextInitializer。使用application属性,根据配置文件将其设置为true / false。
ServletContextInitializer
@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中的值):
使用以下命令在生产服务器上启动应用程序:
--spring.profiles.active=prod
到目前为止,如果您尚未使用配置文件,这听起来似乎需要付出一定的努力,但是无论如何,您仍然很可能需要针对产品环境的配置文件,因此它确实值得。