현재 Flow 정리 JwtAuthenticationFilter 클래스 Login 요청이 오면 JwtAuthenticationFilter에서 attemptAuthentication()를 호출하여 인증을 처리한다. Username&Password가 정상이면 -> AuthenticationToken을 발급한다. 인증토큰 객체를 이용해서 UserDetailsService의 loadUserByUsername()을 호출하여 회원 존재 여부를 검증 한다. UserDetails 객체로 반환된 객체에 대해서 PasswordEncoder를 통해 패스워드를 검증한다. 제대로 검증이 됐다면 인증토큰 객체를 반환하여 시큐리티_세션에 저장한다. 검증 결과에 따라 successfulAuthentication() 또는 unsucc..
Username, Password를 이용한 검증은 완료된 상태로 다음 수행될 successfulAuthenticaiton() 메서드에서 JWT토큰을 발급해보도록 하겠다. JwtAuthenticaitnoFilter 클래스 @Slf4j @RequiredArgsConstructor public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager; // login 요청을 하면 로그인 시도를 위해서 실행되는 함수 @Override public Authentication attemptAuthentication(HttpServle..
이전 포스팅에서 정리한 내용을 기반으로 로직을 작성해겠다. 회원 로그인을 검증하기 위한 UsernamePasswordAuthenticationFilter를 상속받아 로그인 검증을 하고 토큰을 발급받는 JwtAthenticationFilter 클래스를 구현해본다. 로그인 검증 로직 로그인 요청 (username, password) UsernamePasswordAuthenticationFilter에서 [username, password]를 이용해서 정상적인 로그인 여부를 검증 DI로 받은 AuthenticationManager 객체를 통해 로그인을 시도한다. UserDetailsService를 상속받은 PrincipalDetailsService 클래스가 호출되고 loadUserByUsername() 메소드가..
UserDetails, UserDetailsService를 왜 사용해야하는 것일까? 먼저 스프링 시큐리티의 동작을 이해해보자. 시큐리티는 "~/login" 주소로 요청이 오면 가로채서 로그인을 진행한다. 로그인 진행이 완료되면 시큐리티_session을 만들고 SecurityContextHolder에 저장한다. ( SecurityContextHolder = 시큐리티 인메모리 세션 저장소 ) 시큐리티가 갖고있는 시큐리티_session에 들어갈 수 있는 Object는 정해져있다. ( Object == Athentication 타입 객체 ) Authentication 안에 User 정보가 있어야 한다. User 객체 타입은 UserDetails 타입 객체 이다. 정리해보면 Security Session에 객체를..
Filter 필터는 외부 요청을 가장 먼저 검증하는 곳이다. 커스텀 필터를 만들어서 테스트해보자. Filter 생성 @Slf4j public class MyFilter1 implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { log.info("Filter 1"); chain.doFilter(request, response); } } Filter 인터페이스를 상속받아서 구현해주면 된다. 이때 메소드는 init(), destroy(), doFilter()가 있다. Parameter로..
JWT에 대한 기초 지식은 아래 포스팅을 통해 먼저 알아보고 오자 Json Web Token 정리 JWT 사용이유 JWT 이제 jwt를 왜 사용해야하는지는 충분히 알았을 거라 생각하고 어떤 매커니즘으로 jwt를 이용해서 로그인을 구현하고 인증과 인가를 처리하는지 알아보도록 하자. 우리가 가장 먼저 해야할 부분은 JWT를 사용하기 위해 의존성을 추가하는 것이다. 스프링 시큐리티과 JWT를 이용하여 인증/인가를 구현할 것이므로 관련 의존성을 추가해준다. implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'com.auth0:java-jwt:3.19.2' Spring Security Configuration ..
- Total
- Today
- Yesterday