Cheat Sheet

#Interceptor #login #spring 본문

Back End/프레임워크

#Interceptor #login #spring

원파 2019. 4. 5. 18:08

Interceptor : controller에 요청이 도달하기전 수행하거나, 도달한 뒤에 수행하는 것

주로, 로그인체크를 할 때 쓰인다.

페이지에 접속할때 로그인유무를 파악하고 로그인이 되있지 않으면 로그인화면으로 넘기는 식으로 많이 사용하는 것 같다.


Interceptor은 HandlerInterceptor 인터페이스를 상속받은 HandlerInterceptorAdapter클래스를 상속받아 사용하는데

3가지 메소드가 존재한다.

 

* public boolean preHandle() : 요청이 들어오고 controller로 요청이 가기전 수행할 코드 작성

* public void postHandle() : 요청이 controller의 로직을 수행하고 나서 dispatcherservlet에 도달하기전 수행할 코드 작성

* public void afterCompletion() : 요청이 들어와 모든 작업이 완료되고 수행


** Interceptor를 사용하기 위해서는 spring Project에서 해야한다.

 

Interceptor를 수행할 class 생성 후, HandlerInterceptorAdapter상속과 메소드 오버라이드 

package com.mycompany.interceptor;

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

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

import com.mycompany.myapp.HomeController;

public class LoginInterceptor extends HandlerInterceptorAdapter{

	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		logger.info("=============================== START =================================");
		
	
		return super.preHandle(request, response, handler);
	}//end preHandle()
	
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, 
    	Object handler, ModelAndView modelAndView) throws Exception {
	
		logger.info("============================== postHandle ===============================");
	}
	
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
    	Object handler, Exception ex) throws Exception {
		
		
		logger.info("========================= afterCompletion ===============================");
		
		super.afterCompletion(request, response, handler, ex);
	}
	
}//end class

 

servlet-context.xml에 interceptor 등록

<mvc:interceptors>
    <mvc:interceptor>
    	<mvc:mapping path="/**" />
     	<beans:bean id="loginInterceptor" class="com.mycompany.interceptor.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

모든 요청에 대하여 com.mycompany.interceptor.LoginInterceptor경로에 있는 interceptor를 수행

 


 

HomeController.java

package com.mycompany.myapp;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/home", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
       		DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}//end home()
	
	
	@RequestMapping("/login")
	public String login() {
		
		return "login";
	}//end login()
	
	
	
	
	
	
	
	
	
	
}//end class

/home으로 들어오는 요청에 대하여 아래 로직을 수행하고 home.jsp를 호출

 


 

home.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
</body>
</html>

 


 

결과화면

 

 

 


 

경로

 

 


 

톰캣정보

 

 

 

'Back End > 프레임워크' 카테고리의 다른 글

#SpringBoot #Swagger  (0) 2023.09.08
#SpringBoot #lombok  (0) 2023.09.08
#Spring Boot #log4j  (0) 2023.09.08
#HttpServletRequest # RequestParam #데이터객체 #ModelAttribute #Model  (0) 2018.08.29
#CKEditor #이미지업로드  (0) 2018.08.08