【问题标题】:Secure flag on session cookies in a Java Web ApplicationJava Web 应用程序中会话 cookie 上的安全标志
【发布时间】:2014-08-11 21:26:47
【问题描述】:

我正在尝试将安全标志添加到 Java Web 应用程序中的会话 cookie。然而,标准方法存在一个问题,即当安全为真时,即使是 http 请求也会获得安全标志。这意味着 Web 服务器不会在后续请求中获取 cookie,我们最终会得到一个新会话。它在 HTTPS 上运行良好。有问题的应用程序有多个入口点,来自不同的域和一些内部入口点以及内部 IP。有些是HTTPS,有些是HTTP。我需要能够为 HTTPS 请求设置安全标志,但 HTTP 请求。这需要通过域而不是协议来完成,因为所有 HTTPS 请求都通过执行 SSL 卸载的负载平衡器,因此请求到达 Web 服务器(即 jboss 7.1.1)是 HTTP,即使客户端将其视为 HTTPS 并且需要会话 cookie 中的安全标志。这是我尝试过的配置:

    <session-config>
    <session-timeout>60</session-timeout>
    <cookie-config>
        <http-only>true</http-only>
        <secure>true</secure>
    </cookie-config>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>

但是,我不得不将 secure 设置为 false,否则所有 HTTP 入口点都不起作用。

【问题讨论】:

    标签: java security session cookies jboss7.x


    【解决方案1】:

    这可以通过自定义阀门来实现,该阀门提供了创建请求对象的挂钩。如果 servlet 请求是安全的,则在 cookie 中自动设置安全标志(无需 web.xml 设置)。可以在 Valve 中设置请求中的安全标志。

    负载均衡器会在标头Front-End-Https 上添加阀门检测并相应地设置安全。

    这里是阀门类:

    import java.io.IOException;
    
    import javax.servlet.ServletException;
    
    import org.apache.catalina.Valve;
    import org.apache.catalina.connector.Request;
    import org.apache.catalina.connector.Response;
    import org.apache.catalina.valves.ValveBase;
    
    public class SecureRequestModifyingValve extends ValveBase
    {
        private static final String LB_HTTPS_HEADER = "Front-End-Https";
    
        @Override
        public void invoke(final Request request, final Response response) throws IOException, ServletException
        {
            final String httpsHeader = request.getHeader(LB_HTTPS_HEADER);
            request.setSecure(httpsHeader != null && httpsHeader.equalsIgnoreCase("on"));
            getNext().invoke(request, response);
        }
    }
    

    通过将以下内容添加到 WAR 中的 jboss-web.xml 中,我已经让 jboss 使用它。

    <valve>
        <class-name>com.lifecycle.framework.valve.SecureRequestModifyingValve
        </class-name>
    </valve>
    

    我想其他容器也可以让你做类似的事情。

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 2010-11-29
      • 2015-06-07
      • 2018-02-24
      • 1970-01-01
      • 2020-02-17
      • 2013-01-08
      • 2019-01-15
      • 2018-02-19
      相关资源
      最近更新 更多