我有一个在 Tomcat 6 服务器上运行的基于 servlet 的 webapp。URL 方案是 HTTPS。整个站点当前都在 HTTPS 上提供服务。但我真正想做的只是为某些操作(如购买和登录)设置 HTTPS。Tomcat中是否有任何配置可以帮助我轻松做到这一点?
跨 HTTPS 和 HTTP 保持会话是否需要任何代码更改?
实际上,理想情况下,这是在您的 Web 应用程序的 web.xml 文件中配置的。您只需将某些应该安全的 URL<security-constraint><web-resource-collection>
指定为 ,并将 HTTPS 要求指定<transport-guarantee>
为CONFIDENTIAL
. 容器将透明地管理重定向。简单的。
<security-constraint>
<web-resource-collection>
<web-resource-name>My Secure Stuff</web-resource-name>
<url-pattern>/some/secure/stuff/*</url-pattern>
<url-pattern>/other/secure/stuff/*</url-pattern>
...
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
您只需要设置一个 HTTP 连接器,您的所有 servlet 也将在 HTTP 上可用。
对于需要 HTTPS 的操作,您需要像这样自己强制执行,
if (!request.isSecure()) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
在我们的例子中,登录 URL 可能由用户输入,因此如果输入了 HTTP URL,我们会将用户重定向到 HTTPS 页面。
如果您谈论的是 Servlet 会话 (JSESSIONID),那么在 HTTP 和 HTTPS 之间共享会话应该没有任何问题,因为 Tomcat 不会在 cookie 中添加“安全”标志。