【问题标题】:Use HTTPS only for certain pages in servlet based webapp仅对基于 servlet 的 webapp 中的某些页面使用 HTTPS
【发布时间】:2010-11-22 17:52:42
【问题描述】:

我有一个在 Tomcat 6 服务器上运行的基于 servlet 的 webapp。 URL 方案是 HTTPS。整个站点当前都在 HTTPS 上提供服务。但我真正想做的只是为购买和登录等某些操作设置 HTTPS。 Tomcat中是否有任何配置可以帮助我轻松做到这一点?

跨 HTTPS 和 HTTP 保持会话是否需要任何代码更改?

【问题讨论】:

    标签: tomcat servlets https web.xml


    【解决方案1】:

    实际上,理想情况下,这是在您的网络应用程序的 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>
    

    【讨论】:

    • 感谢您的信息,我会试试这个!
    • 我尝试将它添加到我的 web.xml 中,但 Tomcat 没有重定向,它只是失败了!难道我做错了什么?我正在使用 Tomcat 5.5.23。
    • 我在我的应用程序的 web.xml 中尝试了这个,但是 Tomcat 没有重定向;它只是无法加载任何东西。我做错了吗?
    【解决方案2】:

    您只需要设置一个 HTTP 连接器,您的所有 servlet 也将在 HTTP 上可用。

    对于需要 HTTPS 的操作,您需要像这样自己强制执行,

    if (!request.isSecure()) {
        response.sendError(HttpServletResponse.SC_FORBIDDEN);
        return;
    }
    

    在我们的例子中,登录 URL 可能由用户输入,因此如果输入了 HTTP URL,我们会将用户重定向到 HTTPS 页面。

    如果您谈论的是 Servlet 会话 (JSESSIONID),那么在 HTTP 和 HTTPS 之间共享会话应该没有任何问题,因为 Tomcat 不会在 cookie 中添加“安全”标志。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 2011-08-08
      • 2014-01-11
      • 2023-03-17
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      相关资源
      最近更新 更多