如何在 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 头文件的主要内容,如果未能解决你的问题,请参考以下文章
作为部署安装时的 jboss-eap-6.1 oracle 驱动程序定义
JBoss EAP 6.1 上的 Atmosphere 和 WebSocket