포스트 목록

2016년 5월 31일 화요일

[Spring] 인터셉터 적용


목적


  모든 Controller 요청에 대해 로깅 하고싶다.






절차



  클래스 패키지 구조





  설정문서 구조





  1. DD 파일 (web.xml) 설정


<web-app version="2.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 <!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/spring/root-context.xml</param-value>
 </context-param>
 
 <!-- Creates the Spring Container shared by all Servlets and Filters -->
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

 <!-- Processes application requests -->
 <servlet>
  <servlet-name>appServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/spring/appServlet/*-context.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
  
 <servlet-mapping>
  <servlet-name>appServlet</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
 
 <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

</web-app>




  2. servlet-context.xml 설정


<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:beans="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:task="http://www.springframework.org/schema/task"
 xmlns:util="http://www.springframework.org/schema/util"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
  http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">

 <mvc:annotation-driven></mvc:annotation-driven>

 <mvc:annotation-driven>
  <mvc:message-converters>
   <!-- @ResponseBody시 한글 처리를 위해 StringHttpMessageConverter를 등록한다. -->
   <beans:bean class="org.springframework.http.converter.StringHttpMessageConverter"></beans:bean>
  </mvc:message-converters>
 </mvc:annotation-driven>

 <!-- resource(http, css, js ...)에 접근시 해당 경로로 매핑한다. -->
 <mvc:resources mapping="/resources/**" location="/resources/" />

 <!-- Internal View Resolver  -->
 <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <beans:property name="prefix" value="/WEB-INF/views/" />
  <beans:property name="suffix" value=".jsp" />
  <beans:property name="order" value="0"></beans:property>
 </beans:bean>

 <context:component-scan base-package="com.net.malog" />

</beans:beans>




  3. interceptor-context.xml 설정


<?xml version="1.0" encoding="UTF-8"?>
<beans:beans 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:beans="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 
 <mvc:annotation-driven></mvc:annotation-driven>

 <mvc:interceptors>
  <mvc:interceptor>
   <mvc:mapping path="/**"/>
   <beans:bean class="com.net.malog.common.interceptor.RequestUriLoggerInterceptor"></beans:bean>
  </mvc:interceptor>
 </mvc:interceptors>

</beans:beans>




  4. RequestUriLoggerInterceptor.java


package com.net.malog.common.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class RequestUriLoggerInterceptor extends HandlerInterceptorAdapter
{
 private static Logger logger = LoggerFactory.getLogger(RequestUriLoggerInterceptor.class);

 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
 {
  /*
   *  TODO Auto-generated method stub
   *
   *    1. 요청 URI 를 반환
   */

  String reqUri = request.getRequestURI();

  if(reqUri.startsWith("/resources") == false)
  {
   logger.info("=================== Request ===================");
   logger.info("Request URI :: " + reqUri);
   logger.info("===============================================");
  }

  return super.preHandle(request, response, handler);
 }

}








댓글 없음:

댓글 쓰기