inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트 시큐리티 & JWT 강의

스프링부트 시큐리티 25강 - jwt를 위한 강제 로그인 진행

authenticationManager.authenticate(autenticationToken) 인증 시 익셉션 발생

1256

송유진

작성한 질문수 11

0

안녕하세요. 강사님! 설명 너무 잘해주셔서 빠르게 잘 듣고 있습니다.
강의 내용을 따라하던 중 코드가 같은데 막히는 부분이 있는 것 같은데 도통 파악이 안되어 문의 드리고자 글을 남깁니다.
 
join 통해 user db에 생성하고 로그인 시도 중 authenticationManager.authenticate(authenticationToken)
에서 익셉션 발생하여 이후 코드 진행이 안되는 상황입니다.
 
authenticationToken도 잘 생성되고,
loadUserByUsername도 타서 new PrincipalDetails 객체도 잘 생성했는데
내부 소스 디버깅 따라가보니 'postAuthenticationChecks' 체크하는 시점에 토큰이 만료되었다는 메시지와 함께 익셉션이 나는걸 확인했습니다.
토큰이 만료되고 할게 없다고 생각하는데 갑자기 저런 익셉션이 발생하네요.. 어디가 문제일지 확인 부탁드리겠습니다 ..!!

git 주소 및 filter 코드 남겨드립니다. 감사합니다
 
- git 레포 주소 : https://github.com/uz2ni/spring-boot-tester/blob/security/src/main/java/com/spring/tester/config/jwt/JwtAuthenticationFilter.java
 
- JwtAuthenticationFilter.java
@RequiredArgsConstructor
public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter {

    private final AuthenticationManager authenticationManager;

    // login 요청 하면 로그인 시도를 위해서 실행되는 함수
    @Override
    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
        System.out.println("JwtAuthenticationFilter : 로그인 시도중");

        try {
            // 1. username, password 받아서
            ObjectMapper om = new ObjectMapper();
            User user = om.readValue(request.getInputStream(), User.class);
            System.out.println(user.toString());

            // 1-2. 인증 토큰 생성
            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword());

            // 2. 정상인지 로그인 시도 해봄. authenticationManager로 로그인 시도를 하면
            // PrincipalDetailsService가 호출 loadUserByUsername() 함수가 실행된 후 정상이면 authentication이 리턴됨.
            // authentication이 정상 리턴된다는 것은 -> DB에 있는 username과 password가 일치한다는 것.
            Authentication authentication = authenticationManager.authenticate(authenticationToken);

            // 3. PrincipalDetails를 세션에 담고 (권한 관리 위해. 권한 1개뿐이라면 필요없음) => 로그인이 되었다는 뜻
            PrincipalDetails principalDetails = (PrincipalDetails) authentication.getPrincipal();
            System.out.println(principalDetails.getUser().getUsername());

            return authentication;

        }catch(IOException e) {
            e.printStackTrace();
        }

        // 4. JWT 토큰 만들어서 응답하면 됨

        return null;
    }
}

Spring Security spring jwt

답변 1

1

최주호

 이게 false로 되어있어서 그래요!!

0

송유진

헉 대박 ㅠㅠ제가 놓쳤네요 감사합니다!!🙏🏻🔥

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

320

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

696

1

세션 인증방식이 REST 원칙에 위배되는 건가요?

0

339

1

jwt와 실제데이터의 관계

1

243

1

jwt 와 세션ID의 관계

1

312

1

SecurityConfig에서 세션 설정, 인가 설정

0

419

1