You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除WebSphere Liberty与Open Liberty响应的Content-Language头

解决方案

你之前尝试的直接调用response.setLocale(Locale.ROOT)和普通Filter拦截不生效的原因是:Liberty的Web容器内核会在Servlet业务逻辑处理完成、响应提交到网络层之前,统一追加默认的Content-Language头,这个操作发生在应用级的Filter执行之后,所以应用层直接修改响应的操作会被覆盖。以下是两种经过验证的可行方案:

方法1:通过server.xml配置全局移除响应头(推荐)

无需修改应用代码,直接修改Liberty服务器配置即可全局生效,同时支持WebSphere Liberty和Open Liberty所有版本:

  1. 打开服务器的server.xml配置文件,在<featureManager>节点中添加响应头管理特性:
<featureManager>
    <!-- 其他已有特性 -->
    <feature>responseHeader-1.0</feature>
</featureManager>
  1. 在server.xml的根节点下添加头移除配置:
<header id="removeContentLanguage" name="Content-Language" operation="remove"/>

配置完成后重启服务器即可,所有响应会自动移除Content-Language头。

方法2:使用ServletResponseWrapper包装响应实现应用级拦截

如果你只需要针对单个应用生效,不想修改全局服务器配置,可以通过自定义Filter配合响应包装类实现:

  1. 实现自定义Filter和响应包装类,拦截所有Content-Language头的写入操作:
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.IOException;
import java.util.Locale;

public class RemoveContentLanguageFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponseWrapper wrappedResp = new HttpServletResponseWrapper((HttpServletResponse) response) {
            @Override
            public void setHeader(String name, String value) {
                if (!"Content-Language".equalsIgnoreCase(name)) {
                    super.setHeader(name, value);
                }
            }

            @Override
            public void addHeader(String name, String value) {
                if (!"Content-Language".equalsIgnoreCase(name)) {
                    super.addHeader(name, value);
                }
            }

            @Override
            public void setLocale(Locale loc) {
                // 直接固定为ROOT_LOCALE,避免容器触发默认头写入
                super.setLocale(Locale.ROOT);
            }
        };
        chain.doFilter(request, wrappedResp);
    }
}
  1. 在应用的web.xml中配置Filter拦截所有请求,优先级设置为最高:
<filter>
    <filter-name>removeContentLanguageFilter</filter-name>
    <filter-class>com.example.RemoveContentLanguageFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>removeContentLanguageFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

注意:如果你的应用存在主动设置Content-Language的业务场景,需要调整上述拦截逻辑,避免误删自定义的合法头。

内容的提问来源于stack exchange,提问作者Takakiyo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:57:03