본문 바로가기
Kotlin

[Spring Boot] Interceptor로 토큰 검증 적용

by 고체물리학 2022. 11. 10.

중복된 토큰검증코드를 한 번에 검증하기 위해 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를 빈에등록 하지 않고 사용하니 의존성이 주입이 안되었다

구글링 해서 최종 소스를 완료하였다

 

 

 

반응형

댓글