Spring MVC – 14 – Interceptors & Log4J
Merhaba Arkadaslar
Bu bolumde Interceptor kavramini inceleyecegiz ve Log4J loglama framework’unu projemize entegre edecegiz. Log4J konusunda on bilgi icin ; Apache Log4j
Oncelikle Log4J icin Maven dependency tanimini ekleyelim;
<properties> ... <log4j.version>1.2.17</log4j.version> .... </properties> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency>
Internationalization konusunu incelerken LocaleChangeInterceptor sinifini kullanmistik.
LocaleChangeInterceptor sinifini inceleyecek olursak HandlerInterceptorAdapter sinifini kalittigini gorebiliriz.
public class LocaleChangeInterceptor extends HandlerInterceptorAdapter {....}
HandlerInterceptorAdapter sinifi da AsyncHandlerInterceptor arabirimini uygulamaktadir.
public abstract class HandlerInterceptorAdapter implements AsyncHandlerInterceptor {
AsyncHandlerInterceptor arabirimi HandlerInterceptor arabirimini kalitir.
public interface AsyncHandlerInterceptor extends HandlerInterceptor {...}
HandlerInterceptor arabiriminde 3 metot tanimlanmaktadir.
preHandle : Request/Istek , controller tarafindan karsilanmadan once bu metot calisacaktir.
postHandle : Controller calistiktan sonra postHandle metodu calisacaktir.
afterCompletion : Request lifecycle tamamlandiktan sonra afterCompletion metodu calisacaktir.
public interface HandlerInterceptor { boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception; void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception; void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;
log4j.properties
log4j.properties dosyasi default olarak source folder altinda yer aldiginda Spring MVC tarafindan okunacaktir.
tum loglar icin all.txt dosyasini , AuditingInterceptor sinifi icin auditLogger tanimini ekleyelim.
Log dosyalarimiz Tomcat altinda yer alacaktir.
NOT : audit.txt ve all.txt icin location bilgisini kendinize uygun sekilde tanimlayabilirsiniz.
# Auditing Logger log4j.logger.auditLogger=INFO, auditLogger log4j.appender.auditLogger=org.apache.log4j.RollingFileAppender log4j.appender.auditLogger.File=${catalina.base}/audit.txt log4j.appender.auditLogger.layout=org.apache.log4j.PatternLayout log4j.appender.auditLogger.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c : %m%n
AuditingInterceptor.java
package _13.audit.interceptor; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class AuditingInterceptor extends HandlerInterceptorAdapter { private Logger logger = Logger.getLogger("auditLogger"); private String user; private String productId; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse arg1, Object handler) throws Exception { System.out.println("preHandle"); if (request.getRequestURI().endsWith("add")) { if (request.getMethod().equals("GET")) { // logger.info("preHandle : GET request"); } if (request.getMethod().equals("POST")) { user = request.getRemoteHost(); productId = request.getParameter("productId"); // logger.info("preHandle : POST request"); } } return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception arg3) throws Exception { System.out.println("afterCompletion"); // urun ekledikten sonra redirect islemi sonrasinda HTTP 302 POST // request olusur. if (request.getRequestURI().endsWith("add") && response.getStatus() == 302) { logger.info(String.format("A New product[%s] Added by %s on %s", productId, user, getCurrentTime())); } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle"); if (request.getRequestURI().endsWith("add")) { if (request.getMethod().equals("GET")) { // logger.info("postHandle : GET request"); } if (request.getMethod().equals("POST")) { logger.info("postHandle : POST request"); } } } private String getCurrentTime() { DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy 'at' hh:mm:ss"); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); return formatter.format(calendar.getTime()); } }
13.audit.xml
XML konfigurasyon dosyamizda <mvc:interceptors> tagini kullanmistik , AuditingInterceptor sinifini icin bean tanimini ekleyelim.
<mvc:interceptors> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="language" /> </bean> <bean id="audit" class="_13.audit.interceptor.AuditingInterceptor"/> </mvc:interceptors>
Ornegimizi calistiralim ;
http://localhost:8080/injavawetrust.springmvc/products/add?language=en
Sayfamizi acip bir urun ekledigimizde ilgili dizinde
audit.txt
2017-02-11 14:22:11 auditLogger : preHandle : GET request 2017-02-11 14:22:11 auditLogger : postHandle : GET request 2017-02-11 14:22:23 auditLogger : preHandle : POST request 2017-02-11 14:22:23 auditLogger : postHandle : POST request 2017-02-11 14:22:23 auditLogger : A New product[2000] Added by 0:0:0:0:0:0:0:1 on 11/02/2017 at 02:22:23
Github kaynak kodlar / source folder
Injavawetrust-springmvc-tutorial
Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer
Leave a Reply