如何在 JBoss EAP 6.1 中设置 http 头文件

Posted

技术标签:

【中文标题】如何在 JBoss EAP 6.1 中设置 http 头文件【英文标题】:How to set http headers in JBoss EAP 6.1 【发布时间】:2019-12-03 20:48:33 【问题描述】:

我想在 jboss 6.1.0 中为 x-frame 选项和 Strict-Transport-Security 设置 http 标头。

我一直在寻找合适的配置文件来添加这些头文件,我能够看到 jboss 6.4、jboss 7 的一些程序,但我没有得到 jboss 6.1 的任何东西

Configure Http Headers in JBoss EAP 7

这是在 jboss 7 中,我需要为 jboss 6.1 做同样的事情

我在 jboss 6.1 中尝试了很多方法来确定所需的正确配置更改,但我无能为力。

如果有人知道在 jboss 6.1 中这样做,请告诉我

提前致谢。

【问题讨论】:

我可以通过添加过滤器并设置响应来做到这一点,但仅适用于有效的上下文根。我将 jboass 的上下文根设为“/jbossadmin”。现在我也想为其他 URL(无效的上下文根)添加这些标头。例如,如果我在没有 /jboassadmin/ 的情况下执行 curl -i ip:port,我将得到 404 Not found,这里我还需要添加标题。 HTTP/1.1 404 未找到服务器:Apache-Coyote/1.1 X-Powered-By:Servlet/3.0; JBossAS-6 内容长度:0 日期:2019 年 7 月 31 日星期三 06:49:06 GMT 是否有任何选项可以配置这些标头以将它们添加到无效上下文中。谢谢。 【参考方案1】:

如果您使用 Apache HTTPD 作为 JBoss 的代理,使用 Header 指令添加所有这些标头非常容易。否则,您可以在自定义过滤器中设置所有这些标头,并放置在相应的 Web 应用程序的 lib 文件夹中。

【讨论】:

我尝试在自定义过滤器中添加这些标题,将其放在 lib 中并将其映射到 XML,但仍然看不到添加任何标题。我只得到这样的响应:HTTP/1.1 404 Not Found 仅为有效的上下文根添加标头,我将 jboass 的上下文根设为“/jbossadmin”。现在我还想为其他 URL 添加这些标头 仅为有效的上下文根添加标头,我将 jboass 的上下文根设为“/jbossadmin”。现在我还想为其他 URL 添加这些标头。例如,如果我在没有 /jboassadmin/ 的情况下执行 curl -i ip:port 我将得到 404 Not found ,这里我需要添加标题。 HTTP/1.1 404 未找到服务器:Apache-Coyote/1.1 X-Powered-By:Servlet/3.0; JBossAS-6 Content-Length: 0 Date: Wed, 31 Jul 2019 06:49:06 GMT 无论如何要为这些其他 URL 添加标头?【参考方案2】:

这个答案存在于RedHat Knowledgebase。由于它需要 RedHat 凭据,因此我在此处发布了相同的答案。

解决方案:

可以使用 servlet 过滤器将额外的 HTTP 标头添加到响应中。下面是一个使用 Servlet 3.0 @WebFilter 的示例过滤器。使用注解不需要配置web.xml启用过滤器。

/*
 *  This is a sample servlet filter to set "X-Frame-Options" http header to 
 *  http response. 
 */

package com.redhat.jboss.support;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter("/*")
public class AddCustomHeaderFilter implements Filter 

    /**
     * Take this filter out of service.
     */
    public void destroy() 
    

    /**
     * @param request The servlet request we are processing
     * @param result The servlet response we are creating
     * @param chain The filter chain we are processing
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet error occurs
     */
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException 

      ((HttpServletResponse)response).setHeader("X-Frame-Options", "SAMEORIGIN"); 
      chain.doFilter(request, response);

    


    /**
     * Place this filter into service.
     *
     * @param filterConfig The filter configuration object
     */
    public void init(FilterConfig filterConfig) throws ServletException 
    


编译AddCustomHeaderFilter.java后,会生成一个包 使用AddCustomHeaderFilter.class 创建名为com.redhat.jboss.support

使用以下方法为 AddCustomHeaderFilter.class 创建一个 jar 命令。它将生成一个 jar AddCustomHeaderFilter.jar

jar -cvf AddCustomHeaderFilter.jar com

将此 jar 放入 Web 应用程序的 WEB-INF/lib 文件夹中。它将在 Web 应用程序中启用 Servlet 过滤器。

注意: AddCustomHeaderFilter.java 类中给出的示例用于“SAMEORIGIN”。 X-Frame-Options 有以下可能的值:

    DENY:页面不能在框架中显示,无论 网站试图这样做。 SAMEORIGIN:页面只能在同一个框架中显示 来源为页面本身。

【讨论】:

谢谢@Abhijeet,我也在尝试。仅为有效的上下文根添加标头,我将 jboass 的上下文根设为“/jbossadmin”。现在我还想为其他 URL 添加这些标头。例如,如果我在没有 /jboassadmin/ 的情况下执行 curl -i ip:port 我将得到 404 Not found ,这里我需要添加标题。 HTTP/1.1 404 未找到服务器:Apache-Coyote/1.1 X-Powered-By:Servlet/3.0; JBossAS-6 Content-Length: 0 Date: Wed, 31 Jul 2019 06:49:06 GMT 无论如何要为这些其他 URL 添加标头? @Suman 上述解决方案适用于 JBoss EAP 6。您使用的是 EAP 还是 AS?您能否详细说明您的新问题,您可以为现有问题添加更新 @Suman 如果我正确理解您的问题。我的回答只会为您提供有效上下文根的更新标题。但是您也想更新无效上下文根的标头。我说的对吗? 是的,Abhijeet,你是​​对的。我也想查看无效上下文的更新标题。 我们尝试了这个解决方案,结果出现了一些部署异常。但是根据这篇帖子***.com/questions/26975994/…,只有在上下文根正确的情况下才会调用阀门,我认为这又会是同样的问题。

以上是关于如何在 JBoss EAP 6.1 中设置 http 头文件的主要内容,如果未能解决你的问题,请参考以下文章

jconsole 未检测到 jboss eap 6.1

作为部署安装时的 jboss-eap-6.1 oracle 驱动程序定义

JBoss EAP 6.1 上的 Atmosphere 和 WebSocket

JBoss EAP 6.1+ 上的 JDBC 模块

JBoss EAP 6.1 的 Infinispan 超时异常

无法将 Jvisual Vm 与 Jboss EAP 6.1 集成