작성
·
198
0
https://github.com/kimjeonggeon/bankapplication.git
2-bankapplication branch 입니다!
첫번 째 질문은 get 부분 urltemplate으로 받지 못합니다ㅜㅜ..
그리고 저번에 올렸던 질문인데 해결을 못해서요.. 그 이번에 accountcontroller 부분에서 로그인 확인을 postman을 통해 하는데 username을 보냈는데 로그인 실패 response로 안오고 error 만 뜹니다.
아래는 오류 코드 입니다.
감사합니다.
org.springframework.security.authentication.InternalAuthenticationServiceException: 인증 실패
at shop.mtcoding.bank.config.auth.LoginService.lambda������������������loadUserByUsername0(LoginService.java:23)
at java.base/java.util.Optional.orElseThrow(Optional.java:408)
at shop.mtcoding.bank.config.auth.LoginService.loadUserByUsername(LoginService.java:22)
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:94)
at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:133)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:201)
at shop.mtcoding.bank.config.jwt.JwtAuthenticationFilter.attemptAuthentication(JwtAuthenticationFilter.java:50)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:227)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221)
감사합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
kjkkmk42397님, JWT 토큰을 사용한 MockMvc
테스트와 관련하여 문제가 발생한 것으로 보이네요.
첫 번째 문제는 mvc.perform
에서 특정 URL 템플릿을 받지 못한다는 것 같은데, 정확한 문제의 원인을 파악하기 위해서는 해당 코드의 전체적인 맥락과 구성이 중요합니다. 혹시 mvc.perform
에 넘겨주는 URL이 올바른지, WebMvcTest
어노테이션을 사용하여 관련 컨트롤러가 올바르게 등록되었는지 확인해 보세요.
Spring Security 테스트와 관련하여, @WithMockUser
를 사용하여 테스트를 진행하는 예제가 있습니다. @WebMvcTest
와 MockMvc
를 사용하여 인증된 사용자를 가정하고 테스트를 진행할 수 있습니다. 레퍼런스를 참고하여 테스트 구성을 맞춰보시기 바랍니다.
Java 예제:
import org.junit.jupiter.api.Test;
...
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;
...
@WebMvcTest(UserController.class)
class MySecurityTests {
...
@Test
@WithMockUser(roles = "ADMIN")
void requestProtectedUrlWithUser() throws Exception {
this.mvc.perform(get("/"));
}
}
Kotlin 예제:
import org.junit.jupiter.api.Test
...
import org.springframework.security.test.context.support.WithMockUser
import org.springframework.test.web.servlet.MockMvc
...
@WebMvcTest(UserController::class)
class MySecurityTests(@Autowired val mvc: MockMvc) {
@Test
@WithMockUser(roles = ["ADMIN"])
fun requestProtectedUrlWithUser() {
mvc.perform(MockMvcRequestBuilders.get("/"))
}
}
추가적인 정보는 Spring Security reference documentation에서 찾아보실 수 있습니다.
다음으로, 로그인 과정에서 발생하는 오류는 LoginService
의 loadUserByUsername
메소드에서 발생한 것으로 보여집니다. 에러 메시지에 따르면 제공된 username
에 해당하는 사용자를 찾지 못해 인증에 실패하였거나, 사용자 정보를 로드하는 과정에서 예외가 발생했을 수 있습니다. LoginService
에서 username
을 받아 사용자 정보를 로드하는 부분을 다시한번 확인해 보시고, Optional
사용 부분에서 예외 처리를 적절히 하고 있는지 검토해 보세요.
필요한 경우 실제 DB나 사용자 저장소에 해당 username
으로 조회할 수 있는지 확인해 보시기 바랍니다. 오류가 발생하는 클래스와 메소드를 정확히 확인하고, 단위 테스트를 통해 이 부분이 정확히 동작하는지 먼저 확인하는 것이 좋겠습니다.
테스트코드 작성과 관련하여 도움이 필요하시다면, 자세한 문제 상황을 포함하여 다시 질문해 주시면 감사하겠습니다.