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 request
是HttpServletRequest
的instanceof
)。
然后,您可以使用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));