개인과제 로그인 및 댓글 다는 것을 수정을 완료했다. 토큰이 생성안되는 것에 문제가 좀 있었다.
Security Error : password encoding 없이 Login이 실패하는 것이 문제가 되었다. encording을 하지않는 것이 조건이라 이것은 어떻게 해결하나 찾아봤는데 다행히 같은 문제를 겪은 사람이 있어서 해결했다.
UserDetailsServiceImpl.java
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{
User user = userRepository.findByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException("Not found username: " + username));
User noopUser = new User(
user.getId(),
user.getUsername(),
"{noop}" + user.getPassword(),
user.getNickname(),
user.getRole(),
user.getCreatedAt()
);
return new UserDetailsImpl(noopUser);
}
password 부분에 {noop}을 붙여서 해결했는데 다른 단어도 될까싶어서 해봤는데
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "abcd"
오류가 생기는 것으로보면 noop을 사용해야되는 것같다.
password를 해결하고보니 인증 문제들이 생기기 시작했다. 대부분 코딩이 정상적으로 되어있지않았던 것같다. 대부분을 강의 들으면서 했던 방식으로 교체하니 정상적으로 돌아갔다. 조금 줄일 수 있는 부분은 줄일 수 있겠다 싶어서 해봤는데 아에 돌아가질 않는걸 보니 이해를 못한 것같다.
해당 문제를 고치니 또 다른 문제가 생긴 것인데 로그인해서 토큰이 생겼는데 다시 로그인 할때 이 토큰을 인식하지 못했다. 쿠키에서 존재하는 토큰을 찾을 때 Bearer 접두사를 확인하는데 토큰에 붙어나오지 않는 것으로 봐서 이게 문제인 것을 확인하고 토큰 생성 부분을 찾아봤다.
토큰 생성 제일 처음에 BEARER_PREFIX를 붙이지 않아서 생긴 문제로 확인했고 고치니 잘 작동했다. 댓글 생성, 수정, 삭제도 로그인한 내용으로 작업하도록 바꿔야해서 이 부분도 수정을 진행했다.
@AuthenticationPrincipal UserDetails userDetails
@AuthenticationPrincipal 어노테이션을 이용하여 User 인증 정보를 가지고 만들어주었다.
그런데 서버 인스턴스 하나에 인증된 사람 한 명인건지 좀 궁금해졌다. 로그인 된 상태에서 다른 사람 로그인을 진행하니 이상한 느낌을 받았는데 내가 잘못 구현한건지 모르겠다.