Skip to content

Instantly share code, notes, and snippets.

@oharsta
Created March 31, 2016 15:56
Show Gist options
  • Save oharsta/600dfca9d21795cfb050c111fcf7712d to your computer and use it in GitHub Desktop.
Save oharsta/600dfca9d21795cfb050c111fcf7712d to your computer and use it in GitHub Desktop.
StopWatch - without AspectJ - for every request (do not use in production)
package aa.web;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@ControllerAdvice
public class StopWatchAdvice extends OncePerRequestFilter implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest req, ServerHttpResponse response) {
if (req instanceof ServletServerHttpRequest) {
Object start = ((ServletServerHttpRequest) req).getServletRequest().getAttribute("start_ms");
if (start != null && start instanceof Long) {
response.getHeaders().add("X-Timer", String.valueOf(System.currentTimeMillis() - (Long) start));
}
}
return body;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
request.setAttribute("start_ms", System.currentTimeMillis());
filterChain.doFilter(request, response);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment