1. ホーム
  2. java

サーブレットフィルタ。servletRequestからすべてのヘッダーを取得するには?

2023-10-04 23:49:36

質問

以下は、私の 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() を追加しましたが、ヘッダが表示されません。

質問内容

リクエストから来るすべてのヘッダーを取得するにはどうすればよいですか?

どのように解決するのですか?

タイプキャスト ServletRequestHttpServletRequest (ただし ServletRequest requestinstanceof 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);
}