중복된 토큰검증코드를 한 번에 검증하기 위해 Interceptor를 사용하였다
Interceptor는 컨트롤러에 들어오는 요청 HttpRequest와 컨트롤러가 응답하는 HttpResponse를 가로채는 역할을 한다
preHandle을 사용하여 컨트롤러가 호출되기 전에 토큰 검증을 하도록 구현하였다
HandlerInterceptor를 상속받는 AuthInterceptor를 구현한다.
@NoArgsConstructor
class AuthInterceptor :HandlerInterceptor {
@Autowired
lateinit var memberService: MemberService
@Throws(Exception::class)
override fun preHandle(request: HttpServletRequest, response: HttpServletResponse, handler: Any): Boolean {
try {
val accessToken = request.getHeader(AUTHORIZATION_HEADER)
val token = accessToken.substring(BEARER_PREFIX.length)
memberService.checkToken(token) //토큰 검증하는 서비스 구현
return super.preHandle(request, response, handler)
}catch (e:Exception){
throw InternalErrorException(e.message?:"서버에러")
}
}
companion object {
const val AUTHORIZATION_HEADER = "Authorization"
const val BEARER_PREFIX = "Bearer "
}
}
WebmvcConfiguration 설정
@Configuration
@EnableWebMvc
class WebMvcConfiguration: WebMvcConfigurer {
override fun addInterceptors(registry: InterceptorRegistry) {
registry.addInterceptor(authInterceptor())
.addPathPatterns("/**") //Interceptor 적용할 url 추가
.excludePathPatterns("/login","/register");//Interceptor 제외할 url 추가
}
@Bean
fun authInterceptor(): AuthInterceptor {
return AuthInterceptor()
}
}
처음에는 AuthInterceptor를 빈에등록 하지 않고 사용하니 의존성이 주입이 안되었다
구글링 해서 최종 소스를 완료하였다
반응형
'Kotlin' 카테고리의 다른 글
[QueryDSL] 동적 쿼리 작성하기/BooleanBuilder, BooleanExpression (0) | 2022.12.07 |
---|---|
Spring Boot REST API Key 만들어서 적용하기 (0) | 2022.11.15 |
[Spring Boot] AOP 적용하기 (0) | 2022.11.01 |
[Kotlin]CrossOrigin Annotation 여러 origin 사용 (0) | 2022.10.31 |
QueryDSL 결과 값이 Null인 경우 다른 값으로 할당 (0) | 2022.10.28 |
댓글