如何从 Liferay-Portal、Server 的 HTTP 响应字段中删除 HTTP 头?

3

在与Liferay一起工作时,响应中经常提到门户:

Liferay-Portal:Liferay Portal Community Edition 6.1.0 CE (Paton / Build 6100 / January 6, 2012)
Server:GlassFish Server Open Source Edition 3.1.1

如何删除这些信息?
3个回答

3

无法删除添加到HttpServletResponse对象中的头信息。解决此问题的唯一方法是使用Filter包装HttpServletResponse对象,并忽略您想要忽略的头信息。

这是使用示例代码,

public class EatHeadersFilters implements Filter
{
   private List<String> headers;
   public void init(FilterConfig filterConfig) throws ServletException
   {
      String headersString = filterConfig.getInitParameter("headers");
      String[] strings = headersString.split(",");
      headers = Arrays.asList(strings);
   }

   public void doFilter(ServletRequest request, ServletResponse response,
         FilterChain filterChain) throws IOException, ServletException
   {
       filterChain.doFilter(request, 
           new HttpServletResponseWrapper((HttpServletResponse) response){
              public void addHeader(String headerName, String headerValue)
              {
                  if(!headers.contains(headerName)){
                   super.addHeader(headerName, headerValue);
                  } else {
                   //eat the header
                  }
              }
         });
    }

   public void destroy()
   {
   }
}

如果我想从所有门户中删除怎么办? - test1604
修改了我的回答,请检查。 - Ramesh PVK
我正在尝试从响应头中移除filter-class,我该如何实现? - Max

2

Ramesh说得没错,但这是纯Servlet实现。请检查接口com.liferay.portal.kernel.servlet.WrapHttpServletResponseFilter。它提供了相同的功能。它将在Portlet上下文中运行。


1
我可以使用门户配置来完成吗?无需编程? - test1604
你可以使用有限的功能。请查看http://www.liferay.com/documentation/liferay-portal/6.1/user-guide/-/ai/http-header-response。 - Felix Christy
谢谢您的回答,您能描述一下我如何使用我新创建的实现过滤器的类来捕获所有响应吗? - test1604
1
你好,通过查看代码,你只需要将筛选器和筛选器映射放在web.xml中,InvokerFilterChain类将识别并生成包装响应。 - Felix Christy

2
您可以在portal-ext.properties中使用以下键,仅显示应用程序名称和版本(例如Community)。
http.header.version.verbosity=partial

这不应该显示具体的版本号。
原始资源可在http://arunkumarsrm.blogspot.com/2012/11/liferay-611-ga2-application-security.html找到。
您还可以查看以下票据以了解提供的补丁(我没有尝试过): http://issues.liferay.com/browse/LPS-2748 http://issues.liferay.com/browse/LPS-9011 *更新:* 实际上,您可以使用以下选项完全禁用服务器信息。
# portal-ext.properties:
http.header.version.verbosity=Liferay Portal Community Edition

并在 /tomcat-7.0.27/conf/server.xml 中配置以下内容

<Connector
  URIEncoding="UTF-8"
  connectionTimeout="20000"
  port="8080"
  protocol="HTTP/1.1"
  redirectPort="8443"
  server="My Server!"
 />

资源: http://tech-annex.blogspot.com/2013/01/hidding-server-signaturebanner.html

本文介绍了如何隐藏服务器的标识以增强安全性。通过更改HTTP响应头中的Server字段,可以避免潜在攻击者利用该信息来发起攻击。此外,还提供了一些其他技巧来进一步保护服务器和网站。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接