Servletfilter:如何从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 attributeNames = servletRequest.getAttributeNames(); while (attributeNames.hasMoreElements()) { System.out.println("{attribute} " + servletRequest.getParameter(attributeNames.nextElement())); } final Enumeration 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()而不知道任何东西,但我没有得到任何标题。


如何从请求中获取所有标头?

Typecast ServletRequest进入HttpServletRequest (仅当ServletRequest requestHttpServletRequestinstanceof )。

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

像这样的东西:

 @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest httpRequest = (HttpServletRequest) request; Enumeration headerNames = httpRequest.getHeaderNames(); if (headerNames != null) { while (headerNames.hasMoreElements()) { System.out.println("Header: " + httpRequest.getHeader(headerNames.nextElement())); } } //doFilter chain.doFilter(httpRequest, response); } 

使用Java 8,您可以使用流来收集请求标头:

 Map headers = Collections.list(((HttpServletRequest) request).getHeaderNames()) .stream() .collect(Collectors.toMap(h -> h, request::getHeader));