2016-09-29 6 views
0

すべてのHEADリクエストを捕捉し、ステータス200を返すフィルタを作成する必要があります。HEADリクエストでSpringがステータス200を返すようにする

私がやっているように、すべてのHEADリクエストを捕捉し、すべてのリクエストで200を返す何かをするフィルタを作成する必要があります。これは質問です。

私は、フィルタを要求して何かを行うことができますが、リクエストは必要ありませんが、レスポンスは200になることを意味します。他に何ができますか?

public class HttpHeadFilter implements Filter { 
public void init(FilterConfig filterConfig) throws ServletException { 
} 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest httpServletRequest = (HttpServletRequest) request; 

    if (isHttpHead(httpServletRequest)) { 
     chain.doFilter(new ForceHeadToOkStatusWrapper (httpServletRequest), response); 
    } else { 
     chain.doFilter(request, response); 
    } 
} 

public void destroy() { 
} 

private boolean isHttpHead(HttpServletRequest request) { 
    return "HEAD".equals(request.getMethod()); 
} 

private class ForceHeadToOkStatusWrapper extends HttpServletRequestWrapper { 
    public ForceGetRequestWrapper(HttpServletRequest request) { 
     super(request); 
    } 
    //somethig here 
} 
} 
+3

なぜ複雑な?なぜあなたは 'doFilter'を呼び出す必要がありますか? do 'response.setStatus(200)'を使用し、 'doFilter'を呼び出さないでください。 –

+0

ええ、それは探していたものです。リクエストを処理せずに応答を送信できます。 :) – ottercoder

答えて

0

最後に私が作成したインターセプタ:

public class HttpHeadInterceptor extends HandlerInterceptorAdapter { 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 

     if (isHttpHead(request)) { 
      response.setStatus(HttpStatus.SC_OK); 
      return false; 
     } 
     return true; 
    } 

    private boolean isHttpHead(HttpServletRequest request) { 
     return HttpMethod.HEAD.equals(request.getMethod()); 
    } 

} 

そしてWebMvcConfigurerAdapterにこれを追加しました:

@Override 
public void addInterceptors(InterceptorRegistry registry) { 
    registry.addInterceptor(new HttpHeadInterceptor()); 
} 

をそして、それがスムーズに動作します)

関連する問題