Servlet 过滤器:如何从 servletRequest 中获取所有标头?

新手上路,请多包涵

这是我的 WebFilter 的样子

@WebFilter("/rest/*")
public class AuthTokenValidatorFilter implements Filter {

    @Override
    public void init(final FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
        final Enumeration<String> attributeNames = servletRequest.getAttributeNames();
        while (attributeNames.hasMoreElements()) {
            System.out.println("{attribute} " + servletRequest.getParameter(attributeNames.nextElement()));
        }

        final Enumeration<String> parameterNames = servletRequest.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            System.out.println("{parameter} " + servletRequest.getParameter(parameterNames.nextElement()));
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
    }
}

我试图在网上了解如何从请求中获取 HTTP headers 的值。

我没有找到任何东西,所以我试图在不知道任何东西的情况下枚举 servletRequest.getAttributeNames()servletRequest.getParameterNames() ,但我没有得到任何标题。

问题

如何获取来自请求的所有标头?

原文由 daydreamer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 637
1 个回答

Typecast ServletRequest into HttpServletRequest (only if ServletRequest request is an instanceof HttpServletRequest ).

然后你可以使用 HttpServletRequest.getHeader()HttpServletRequest.getHeaderNames() 方法。

像这样的东西:

 @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    Enumeration<String> headerNames = httpRequest.getHeaderNames();

    if (headerNames != null) {
            while (headerNames.hasMoreElements()) {
                    System.out.println("Header: " + httpRequest.getHeader(headerNames.nextElement()));
            }
    }

    //doFilter
    chain.doFilter(httpRequest, response);
}

原文由 Buhake Sindi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题