-
[Spring] ExpirationDate 만료일 설정하기JAVA/SPRING 2018. 5. 2. 15:26
ExpirationDate
프로젝트 중에 ExpriationDate를 이용하여 기존 프로덕션의 기한을 주는 인터페이스를 사용하여 포스팅 해보려고 합니다.우선 Component 를 만듭니다.커스텀 어노테이션을 만드는데요.123456789101112131415package 경로;import static java.lang.annotation.RetentionPolicy.RUNTIME;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.Target;@Target(ElementType.METHOD)@Retention(RUNTIME)public @interface ExpirationDate {String endDate() default "2099-12-31 23:59:59";}cs Interceptor를 통해 해당 주소의 만료일을 관리합니다.파라미터가 없으면 만료일은 2099-12-31 23:59:59로 지정합니다.우리가 주석을 만들 때, 어노테이션들의 목적은 항상 분명하지 않을 수도 있습니다.새로 생성 된 어노테이션 유형에 일종의 메타 데이터 (또 다른 자바 어노테이션)를 제공하여 도구가 의도 된 기능을 공개 할 수 있도록하거나 컴파일러가 컴파일 중에 의도 한 기능을 명시 할 수 있습니다.그 같은 목적을 위해 자바 언어는 네가지의 어노테이션 유형을 정의합니다.TargetRetentionDocumentationInherited위의 네가지를 meta-annotation이라고 일컫습니다.Target Annotation은 코드의 어떤 요소가 정의 된 형식의 주석을 가질 수 있는지 지정합니다.위와 같이 Element.Type.METHOD로 지정하면 Method 요소가 가질 수 있다는 것을 Target으로 지정하는 것입니다.그리고 가시성을 지정하는 Retention이 있습니다.총 3가지가 있습니다.CompilersToolsRuntimeRetention에 위와 같이 Runtime 식별자를 사용하면 class 파일에 주석이 기록 될뿐만 아니라 JVM에서 런타임에 사용할 수있게됩니다.JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당 받고 이 메모리를 용도에 따라 여러 영역으로 나누어 관리합니다.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051package 인터셉터 경로;import java.util.Calendar;import java.util.Date;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.time.DateUtils;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import ExpirationDate 경로;/**** Expiration Date Interceptor* Expires after that time** Date Format "yyyy-MM-dd HH:mm:ss"**/public class ExpriationInterceptor extends HandlerInterceptorAdapter {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {boolean isExpired = true;HandlerMethod method = (HandlerMethod)handler;ExpirationDate expire = method.getMethodAnnotation(ExpirationDate.class);if ( expire != null ) {try {Date expireDate = DateUtils.parseDate(expire.endDate(), "yyyy-MM-dd HH:mm:ss");isExpired = (Calendar.getInstance().getTimeInMillis() < expireDate.getTime()) ;if (!isExpired)response.sendError(HttpServletResponse.SC_BAD_REQUEST);} catch (Exception e) {isExpired = true;}}return isExpired;}}cs 이번에는 인터셉터 컴포넌트를 받아서 사용하는 인터셉터를 만들어봅시다.DATE를 양식을 적절히 파싱하고 EXPIRED 될 때 배드 리퀘스트를 뱉어서 에러 페이지로 전환하도록 합니다.1234567@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new ExpirationInterceptor()).addPathPatterns("/**");}추가하시는 부분입니다.cs addPathPatterns에는 controller로 오는 요청들에 대한 패턴을 지정하여, 이 패턴들에 해당하는 요청들에 대해 지정한 interceptor를 태우라는 설정입니다.설정한 패턴들 중, 일부 패턴을 제외하고 싶다면 excludePathPatterns 를 붙여 제외하고 싶은 패턴을 string 값으로 주면 됩니다.이제 구성은 끝났으니 실제 파일에 사용하시면 됩니다.사용은 해당 컨트롤러 메서드에 선언하면 됩니다.1234@ExpirationDate(endDate="2018-04-01 00:00:00")public String main() {return "main";}cs 출처https://www.mindstick.com/Articles/12141/annotations-in-java-target-and-retentionhttps://www.holaxprogramming.com/2013/07/16/java-jvm-runtime-data-area/
http://www.leafcats.com/40
'JAVA > SPRING' 카테고리의 다른 글
Asynchronous, Multi-thread 개발하기 (0) 2018.06.04 [Spring] Restful을 위한 @ResponseBody 와 @RestController (0) 2018.04.25 [Spring]Spring Boot + Tiles (0) 2018.04.10