我有一个位于nginx后面的tomcat应用程序服务器。 SSL终止于nginx。 部署在tomcat上的Spring web-mvc应用程序应该在JSESSIONID上设置安全标志。 如果春天有一些自动检测,这将是很酷的,所以我不会在开发过程中受到打扰,因为我没有那里的SSL。
有没有办法告诉spring自动设置标志?
我使用JavaConfig设置应用程序并使用Maven创建可部署的war文件。
我已经检查了这个,但这看起来有点丑陋和静态: set 'secure' flag to JSESSION id cookie
答案 0 :(得分:10)
使用spring-session时,例如在reddis中坚持你的会议,
这确实是自动完成的。 Cookie由org.springframework.session.web.http.CookieHttpSessionStrategy
创建,CookieHttpSessionStrategy#createSessionCookie
在sessionCookie.setSecure(request.isSecure());
检查请求是否来自HTTPS并相应地设置安全:
ServletContextInitializer
如果您 不 使用spring-session,则可以使用@Bean
public ServletContextInitializer servletContextInitializer(@Value("${secure.cookie}") boolean secure) {
return new ServletContextInitializer() {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.getSessionCookieConfig().setSecure(secure);
}
};
}
配置安全Cookie。
使用application property,根据个人资料将其设置为true / false。
secure.cookie=false
application.properties(在配置文件'prod'未激活时在dev中使用):
secure.cookie=false
application-prod.properties(仅在配置文件'prod'处于活动状态时使用,覆盖application.properties中的值):
--spring.profiles.active=prod
使用以下命令在prod服务器上启动您的应用程序:
type Lead struct {
FbId string `json:"fbId"`
Email string `json:"email"`
Telefono string `json:"telefono"`
Version string `json:"version"`
Mac string `json:"mac"`
Os string `json:"os"`
}
听起来有些努力,如果你到目前为止还没有使用过配置文件,但是你很可能还需要一个prod环境的配置文件,所以非常值得。
答案 1 :(得分:2)
如果您使用的是Spring Boot,则有一个简单的解决方案。只需在您的application.properties
中设置以下属性:
server.servlet.session.cookie.secure=true
来源:Spring docs - Appendix A. Common application properties
如果您有使用HTTPS的环境,而有些没有HTTPS的环境,则需要在没有HTTPS的配置文件中将其设置为false。否则,安全cookie将被忽略。
答案 2 :(得分:0)
只需添加
server:
session:
cookie:
secure: true
答案 3 :(得分:0)
添加其他选项
您可以使用ServletContextInitializer设置安全cookie和仅http标志
<%
String price="";
price=request.getParameter("price").toString();
out.println(price); // Here I want to display the value of string "s" that
// is total price $10 but getting null value
%>
答案 4 :(得分:0)
在nginx作为ssl端点之后,这并不是一件简单的任务:必须通过nginx标头(X-Forwarded-Proto: https
,请参见Using the Forwarded header)检测安全连接
但这很容易通过nginx config解决:
if ($scheme = http) {
return 301 https://$http_host$request_uri;
}
proxy_cookie_path / "/; secure";