스프링

[스프링 시큐리티] security6.x에서의 filter등록시 authenticationManager관련 이슈 해결방법

rkrkrr0101 2024. 1. 26. 10:13

6.0이상에선 websecurityconfigureradapter가 사라지면서 UsernamePasswordAuthenticationFilter를 사용할때 authenticationManager를 받아오는게 달라져서 시행착오를 좀 겪었음

그래서 해결방법을 기록해둠

모든 코드는 코틀린임

 

1.시큐리티컨피그(시큐리티설정파일)에서 AuthenticationConfiguration 를 di받음

@Configuration
@EnableWebSecurity
@EnableMethodSecurity(securedEnabled = true, prePostEnabled = true)
class SecurityConfig(
		val authenticationConfiguration: AuthenticationConfiguration) {
	//...
}

2.필터만들기(메인로직)

class JwtAuthFilter(private val authenticationManager:AuthenticationManager):UsernamePasswordAuthenticationFilter() {
    override fun attemptAuthentication(request: HttpServletRequest?, response: HttpServletResponse?): Authentication {
		//로그인로직위치
    }

}
//

여기서 authenticationManager에 private를 붙여줘야함,아니면 시큐리티가 만든 빈이랑 충돌나는듯

 

3.필터등록

@Configuration
@EnableWebSecurity
@EnableMethodSecurity(securedEnabled = true, prePostEnabled = true)
class SecurityConfig(val authenticationConfiguration: AuthenticationConfiguration) {
    @Bean
    fun filterChain(http:HttpSecurity):SecurityFilterChain{
        //...기타로직
        http.addFilter(JwtAuthFilter(authenticationManager(authenticationConfiguration)))
        //...기타로직

        return http.build()
    }
}

이렇게 생성하면 별문제없이 사용가능했음