如何为Tomcat 7中的某些URLselect性地启用或禁用SSL

我在Tomcat 7中使用SSL,创build一个密钥库并configurationserver.xml ,并在web.xmlconfiguration如下

 <security-constraint> <!-- SSL enforced --> <web-resource-collection> <web-resource-name>SSL</web-resource-name> <url-pattern>/inspectionGp/*</url-pattern> <url-pattern>/inspection/*</url-pattern> <url-pattern>/inspGpDt/*</url-pattern> <url-pattern>/inspDt/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> 

这适用于SSL,这些受限制的URL被迫仅使用SSL,但其他URL也可以使用HTTP和HTTPS,奇怪的是,我不希望使用HTTPS来处理<url-pattern>中未configuration的<url-pattern> 。 我使用<transport-guarantee>NONE</transport-guarantee> ,这将导致所有URL支持HTTP和HTPPS。 那么有谁能帮我解释一下如何解决这个问题?

绝对考虑使用SSL的一切。 我们的许多客户正在朝着这个方向发展,我会全力推荐。

如果混合使用HTTP / HTTPS并希望保持会话状态,则必须绕开Tomcat中的一些机制,试图防止这种情况(JSESSIONID的安全cookie)。 一旦你成功地做到了这一点,那么有人可能会劫持来自HTTP的会话,并在HTTPS方面采取行动。

所有这一切,如果你想有这个细粒度的控制水平,你可以考虑使用一个ServletFilter。 该filter可以在web.xml中首先应用,并应用于“/ *”URL模式的“请求”调度器(或只需要在需要做出此决定的模式)。

filter会查看请求。 如果它是一个必须是HTTPS的path,它将检查request.isSecure()。 如果不安全,它会发出一个301redirect到HTTPS的一面,确保保持完整的请求path和任何URL参数。 同样也可以从HTTPSredirect到HTTP。

我热爱servletfilter。 他们是请求处理的瑞士军刀。 没有什么你不能做的。 最重要的是,行为是应用程序的一部分,而不是Tomcat设置的自定义。 你可以在任何地方部署应用程序,它会“只是工作”。