如何在 Tomcat 中添加自定义标头?

Posted

技术标签:

【中文标题】如何在 Tomcat 中添加自定义标头?【英文标题】:How to add a custom header in Tomcat? 【发布时间】:2014-05-23 06:13:16 【问题描述】:

我们有一个在 Tomcat 上运行的应用程序。在任何请求到达我们的服务器之前,它都会通过一个网关。此网关添加了一个名为 request-id 的自定义 http 标头。这就是我们在整个子系统中跟踪请求的方式。

有时网关可能无法添加此标头。在那种情况下,我想知道是否可以编写一个过滤器或其他一些东西来添加这个头,如果它丢失并将值设置为一个 UUID。这样我的业务逻辑就不必担心请求 id 会丢失。

我已经在网上搜索过,但还没有找到任何东西。

【问题讨论】:

【参考方案1】:

你已经很久没有问这个问题了,但最近我遇到了同样的情况,我必须检测请求是否有 Coookie 标头,否则,添加 Set-Cookie 标头和 SameSite=None。我已经通过过滤器实现了这一点。就我而言,每个请求或响应都必须分别有一个 Cookie 或 Set-Cookie 标头。

public class SameSiteCookieHeaderFilter implements Filter 

private static final String LOCALE_ID_COOKIE = "locale";

private static final String SET_COOKIE_HEADER = "Set-Cookie";

@Override
public void destroy() 


@Override
public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse,
                     final FilterChain filterChain) throws IOException, ServletException 
    final HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    final HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
    final Collection<String> setCookieHeaders = httpServletResponse.getHeaders(SET_COOKIE_HEADER);

    for (final String setCookieHeader : setCookieHeaders) 
        httpServletResponse.addHeader(SET_COOKIE_HEADER, setCookieHeader + "; Secure; SameSite=None");
    

    if (setCookieHeaders.size() == 0) 
        final Cookie[] cookies = httpServletRequest.getCookies();

        for (final Cookie cookie : cookies) 
            if (cookie.getName().equals(LOCALE_ID_COOKIE)) 
                httpServletResponse.addHeader(SET_COOKIE_HEADER, buildSessionIdCookie(cookie.getValue()));
            
        
    

    filterChain.doFilter(servletRequest, servletResponse);


@Override
public void init(FilterConfig filterConfig) throws ServletException 


private String buildSessionIdCookie(final String value) 
    return LOCALE_ID_COOKIE + "=" + value + "; " + "Path=/; " + "SameSite=None; " + "Secure; HttpOnly;";

web.xml(应用程序端)

<filter>
    <filter-name>SameSiteCookieHeaderFilter</filter-name>
    <filter-class>de.chemmedia.kw.core.filter.SameSiteCookieHeaderFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SameSiteCookieHeaderFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

仅供参考:Tomcat 7.0.104、Servlet 3.1 和 Spring 4.2.x

我希望我的回答对某人有帮助??

【讨论】:

以上是关于如何在 Tomcat 中添加自定义标头?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 wcf 中添加自定义肥皂标题?

如何在 PowerShell 中运行 appCmd 以将自定义标头添加到默认网站

如何以角度将自定义标头添加到httpRequest

PHP cURL 自定义标头

如何将自定义 HTTP 请求标头添加到 Thymeleaf 生成的表单或链接?

如何将自定义标头添加到zend Mail Message