jwt 로그인시 패스워드 검증
1118
작성한 질문수 5
JWT 로그인 부분에서
username만 검증하고
password는 검증하는 부분이 안보이는거 같은데 맞나요?
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
System.out.println("UsernamePasswordAuthenticationFilter :: JwtAuthenticationFilter()");
// 1. id, pw 받아서
try {
// x-www-form-urlencoded 로 요청시
// BufferedReader br = request.getReader();
// String input = null;
// while((input = br.readLine()) != null){
// System.out.println(input);
// }
// System.out.println(request.getInputStream().toString());
// json 으로 요청시
ObjectMapper om = new ObjectMapper();
User user = om.readValue(request.getInputStream(), User.class);
// 토큰 만들기
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword());
// PrincipalDetailsService의 loadUserByUsername() 이 실행된 후 정상이면 Authentication이 리턴됨
// DB에 있는 username과 password가 일치한다.
Authentication authentication = authenticationManager.authenticate(authenticationToken); // 매니져가 인증을해서 Authentication 객체를 만들어줌
PrincipalDetails principalDetails = (PrincipalDetails) authentication.getPrincipal();
// System.out.println("ㅍㅍㅍ " + principalDetails.getUser().getUsername()); // 이게 조회가 된다는건 로그인 됫다는뜻
// System.out.println("---------------------------------");
// authentication 객체가 Security session 영역에 저장을 해야하고 그방법이 return
return authentication;
} catch (IOException e) {
e.printStackTrace(); // 에러낫을때 떠넘겨 버리면 밑에 코드가 unreacheable 되서 컴파일 에러
}
// 2. 정상인지 로그인 시도를 authenticationManager로 하면 PrincipalDetailsService loadUserByUsername() 가 실행됨
// 3. PrincipalDetails 를 세션에 담고 => 세션에 값이 있어야 권한 관리가 된다. (권한관리 안할거면 세션에 안담아도 됨)
// 4. JWT 토큰을 만들어서 응답해주면
// System.out.println("================================");
return null;
}사용자 입력(username, password)만 받아서 검증없이 Authentication 객체 만들고 있고
@Service
@RequiredArgsConstructor
public class PrincipalDetailsService implements UserDetailsService {
private final UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
System.out.println("PrincipalDetaiilsService :: loadUserByUsername()");
User userEntity = userRepository.findByUsername(username);
System.out.println("DB Connection :: UserRepository");
return new PrincipalDetails(userEntity);
}
}loadUserByUsername 에서도 username 만 받아서 엔티티 생성하는데
어디서 password 검증도 하는건지 궁금합니다.
답변 1
0
authenticationManager에게 위임되어 처리됩니다.
authenticate 메소드를 호출하여 내부적으로 사용자의 아이디와 비밀 번호를 확인합니다.
일치하는 정보가 있다면 Authentication 객체를 반환합니다.
JWT를 구현한 다음 이 API를 호출해서 사용하는 것은 프론트엔드 쪽에서 하는 역할인가요?
0
95
1
Jwt쓰면 스프링시큐리티는 필수적으로 사용해야하나요?
0
401
1
13:23 system.out 출력문이 다르게 나옵니다.
0
130
1
수료증 문의
0
226
2
9분대에 질문이 있습니다 !
0
114
1
password 비교를 하지 않았는데 어떻게 인증이 통과된 건가요?
0
321
1
이전 강의 참고하라는 말씀
0
253
1
강의 실습하다가 막히는 분들 참고(2024년8월 기준)
2
1116
2
구글 소셜 로그인 302
0
200
1
오류 문의 _ org.springframework.orm.jpa.JpaSystemException: could not deserialize
1
584
1
[자바] 시큐리티 Config 참고
13
953
1
이론강의
0
280
1
SpringSecurity JWT 로그인 URL 2개 설정하는 방법
0
487
1
2024.06기준) 최근 SecurityConfig 설정 문의
0
921
3
구글 로그인시 authentication이 null 값이라고 에러가 발생합니다.
0
678
2
특정 url필터 거는 방법 이슈
0
422
1
강사님께서 말씀하시는 시큐리티세션이 SecurityContext인가요?
0
277
1
25강 마지막 테스트에서 오류
1
1044
2
jwt를 저장하는 위치에 궁금한 점이 있습니다.
0
298
1
mustache를 사용하지 않고 thymeleaf를 사용하려고 하는데
0
697
1
세션 인증방식이 REST 원칙에 위배되는 건가요?
0
340
1
jwt와 실제데이터의 관계
1
243
1
jwt 와 세션ID의 관계
1
313
1
SecurityConfig에서 세션 설정, 인가 설정
0
419
1






아항.. 그러네요 디버그 돌려보니까