로그인 인증 관련 질문
951
작성한 질문수 2
기선님 안녕하세요~
테스트 코드로 로그인 인증 검증하는 코드 부분에서 잘 안되는 부분이 있어 문의드려요!
저는 빌드 도구 gradle, spring boot 3.0.1 버전, Java 17 버전으로 개발하고 있습니다.
UsernamePasswordAuthenticationToken 을 Nickname, Encryped Password를 통해 가져와서 SecurityContextHolder를 통해 token을 Set 해주는 코드가 아래와 같이 있습니다.
public void login(Account account) {
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
account.getNickname(),
account.getPassword(),
List.of(new SimpleGrantedAuthority("ROLE_USER")));
SecurityContextHolder.getContext().setAuthentication(token);
}
SecurityMockMvcResultMatchers의 authenticated로 테스트 코드 계정 인증 시키는 부분에서 "Authentication should not be null" 이슈가 발생하네요.
디버깅 시도 해보면, mockMvc 마지막 검증(authenticated) 쪽에서는 분명 test라는 nickname도 갖고 있지만.. authenticated 호출되는 시점에 request Session을 가져오면 null이 나와버리네요 ㅠㅠ. 사용 중인 SecurityMockMvcResultMatchers 자체 버전은 다르긴 하지만.. 코드는 완전 동일한데 이런 오류가 발생하네요 ㅠ 혹시 해결을 위해 해볼 만한 시도가 있을까요~?
void checkEmailToken_with_correct_input() throws Exception {
Account account = Account.builder()
.email("test@email.com")
.password("12345678")
.nickname("test")
.build();
Account newAccount = accountRepository.save(account);
newAccount.generateEmailCheckToken();
mockMvc.perform(get("/check-email-token")
.param("token", newAccount.getEmailCheckToken())
.param("email", newAccount.getEmail()))
.andExpect(status().isOk())
.andExpect(model().attributeDoesNotExist("error"))
.andExpect(model().attributeExists("nickname"))
.andExpect(model().attributeExists("numberOfUser"))
.andExpect(view().name("account/checked-email"))
.andExpect(authenticated());
}
답변 1
3
해당 이슈는 자문 자답합니다.
Spring Security 5.x 버전에서의 SecurityContextPersistenceFilter는 SecurityContext 정보를 저장하지만, 6.x 버전에서 SecurityContextHolderFilter가 Deprecated 되어, SecurityContextPersistenceFilter가 사용되고 있어서 SecurityContext 정보가 저장되지 않더라고요.
읽기만 하니, mockMvc에서 검증할 수가 없었던 것,
사실 아래와 같이 HttpSessionSecurityContextRepository를 이용하라고 권고안에는 되어있는데 안되더라고요.
.securityContext((securityContext) -> securityContext .securityContextRepository(new HttpSessionSecurityContextRepository()) );
저는 우선 아래 설정을 적용하여 SecurityContext 저장 방식을 5.x 버전으로 구동되도록하여 해결은 하였습니다.
.securityContext((securityContext) -> securityContext .requireExplicitSave(false));
관련하여 혹시라도 찾고 계신 분들이 있다면 참고해주시고요~ 근본적인 설명이 가능한 부분이 있다면 함께 공유해도 좋겠네요~
Study 개설하는 로직에 대해서 궁금점이 있습니다.
0
56
1
앱 재시작 후 회원가입
0
104
1
app.host 관련 질문이 있습니다
0
99
1
강의 버전 정보
0
127
1
event, study 참조
0
222
2
비밀번호 변경 로직 질문있습니다.
0
136
1
프로필 수정 처리 merge 질문입니다.
0
108
1
회원가입 성공 후 redirect이동시 권한 질문
0
498
3
HtmlEmailService 개발하다 생긴 의문입니다
0
252
2
postgreSql 연결하여 JPA 를 통해 테이블 생성시 ZONE 테이블 생성에서 에러가 납니다
0
433
2
수업질문 [긴급] 로그인안되는 문제 말씀해주시는 부분 반영해서 최종 질문드립니다
0
265
2
[긴급-재업로드]수업질문 로그인 안 되는 문제
0
238
1
[긴급] 로그인해도 네비게이션 바가 안 바뀌고 있습니다!! 로그인이 안 됩니다 도와주세요
0
278
1
cropper 오류 문제로 질문드립니다..
0
289
2
authentication관련 질문...
0
498
2
모임참가 취소 할때 로직 질문
0
352
3
안녕하세요 기선님 질문이있습니다..
0
231
1
HTML코드 및 강의 중간자료들
0
681
3
springSecurity
0
525
2
버전 질문입니다.
0
304
1
부트스트랩, css
0
357
2
영속성 컨텍스트 질문
0
252
2
다시 강의를 보니 드는생각..
0
355
2
5:50에 나오는 HTML코드는 어디서 찾을 수 있나여?
0
317
1





