특정 컨트롤러 클래스에서만 User-Agent를 찍고 싶었다.
그래서 어노테이션을 만들고..
import java.lang.annotation.*;
/**
* Indicates that an annotated class or method for logging the User-Agent information.
*/
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface UserAgentLogging {
}
afterCompletion에서 세 번째 파라메터를 통해
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception)
찍을지 여부를 판단하는 private 메서드
private boolean isLogForUserAgent(Object handler) {
if (handler instanceof HandlerMethod) {
final HandlerMethod handlerMethod = (HandlerMethod) handler;
final Method method = handlerMethod.getMethod();
return method.getDeclaringClass().isAnnotationPresent(Controller.class)
|| method.isAnnotationPresent(UserAgentLogging.class);
}
return false;
}
user agent 는 request.getHeader("User-Agent") 를 통해 구한다.
HttpServletRequest
유사한 구현: http://itpsolver.com/spring-3-에서-컨트롤러-메서드controller-method-진입시-어노테이션annotation/
'Programing > Framework' 카테고리의 다른 글
[스프링] URI 만드는 구성 요소 UriComponentsBuilder (0) | 2018.02.27 |
---|---|
[Spring] 특정 타입의 객체를 Request 스코프로 받기 (0) | 2016.10.18 |
[Spring] 스프링에서 정적리소스 설정하기 (0) | 2016.09.13 |
[Spring] @Controller에서 @RequestParam로 Date 타입 받기. (0) | 2016.09.08 |
logback - 사람이 보기 좋게 하기 위해 패딩(padding)을 넣자. (0) | 2016.08.11 |