250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- STS
- IntelliJ
- Docker
- 문서
- PostgreSQL
- git
- spring
- oracle
- Python
- JDBC
- 설정
- Thymeleaf
- Source
- Eclipse
- jpa
- AJAX
- error
- 오픈소스
- Spring Boot
- SpringBoot
- ubuntu
- Exception
- JavaScript
- myBatis
- MSSQL
- Tomcat
- MySQL
- maven
- Core Java
- Open Source
Archives
- Today
- Total
헤르메스 LIFE
[SpringBoot] Interceptor 본문
728x90
Interceptor 구현
Interceptor는 HandlerInterceptor 인터페이스를 구현하거나, HandlerInterceptorAdapter를 상속받은 클래스를 만들고 다음의 메소드를 구현합니다.
preHandler - Controller의 메서드가 호출되기 전 호출됩니다. 이 메서드가 false 를 반환하면 코드의 흐름이 중단됩니다.
postHandler - Controller의 메서드의 수행이 완료되고, view 처리를 수행하기 전에 호출됩니다.
afterCompletion - view 처리까지 완료되고 응답결과가 브라우저로 전달되기 전에 호출됩니다.
package com.study.myweb.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class AuthInterceptor implements HandlerInterceptor {
public boolean isInstance( Object handler, Class<?> clazz ) {
if( !( handler instanceof HandlerMethod ) ) {
return false;
}
Object object = ( (HandlerMethod)handler ).getBean();
if( clazz.isInstance( object ) ) {
return true;
}
return false;
}
@Override
public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler ) throws Exception {
// 1. handler 종류 확인
// Controller에 있는 메서드이므로 HandlerMethod 타입인지 체크
if( !( handler instanceof HandlerMethod ) ) {
// return true이면 Controller에 있는 메서드가 아니므로, 그대로 컨트롤러로 진행
return true;
}
String targetURI = request.getServletPath();
StringBuilder sb = new StringBuilder();
// request 정보
sb.append( "\n[preHandle] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" );
sb.append( "\n#remoteIp : " ).append( request.getRemoteAddr() );
sb.append( "\n#targetURI : " ).append( targetURI );
sb.append( "\n#reqUrl : " ).append( request.getRequestURL().toString() );
sb.append( "\n#userAgent : " ).append( request.getHeader( "User-Agent" ) );
sb.append( "\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" );
System.out.println( sb.toString() );
return true;
}
}
Interceptor 등록
package com.study.myweb.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
// Spring MVC 프로젝트에 관련된 설정을 하는 클래스
@Configuration
//@EnableWebMvc
public class WebMVCConfig implements WebMvcConfigurer {
@Autowired
@Qualifier( value = "authInterceptor" )
private HandlerInterceptor authInterceptor;
/**
*
*/
@Override
public void addInterceptors( InterceptorRegistry registry ) {
registry.addInterceptor( authInterceptor ).addPathPatterns( "/**" );
}
}
오류 : Could not resolve view with name 'index' in servlet with name 'dispatcherServlet'
https://hermeslog.tistory.com/548
출처 : 윤재성 - 만들면서 배우는 Spring MVC5
https://sas-study.tistory.com/274
728x90
'Spring Boot Framework' 카테고리의 다른 글
[SpringBoot] JPA Entity 생성 테스트 (0) | 2021.12.01 |
---|---|
[SpringBoot] Logback 설정 (2) | 2021.07.30 |
[SpringBoot] SpringBoot 기반 Web Project 생성 (1) | 2021.07.27 |
[Spring Boot] Spring Resttemplate 예외 처리 (0) | 2021.01.31 |
[Spring Boot] Spring Resttemplate Sample (0) | 2021.01.31 |