
JWT를 저장하는 방법은 여러가지가 있다. 대표적으로 로컬 스토리지, 세션 스토리지, 쿠키가 있다. 1. 로컬스토리지, 세션 스토리지 로컬스토리지, 세션스토리지란? 둘 다 HTML5에 추가된 저장소이다. 로컬 스토리지와 세션 스토리지의 가장 큰 차이점은 데이터의 영구성이다. 로컬 스토리지에 들어간 데이터는 유저가 지우지 않는 이상 브라우저에 계속 남아있게 된다. 하지만. 세션 스토리지에 들어간 데이터는 브라우저 탭을 닫을 경우에 사라지게 된다. 지속적으로 필요한 데이터(자동 로그인)는 로컬스토리지에 저장하고 잠깐 필요한 정보(일회성 로그인)은 세션 스토리지에 저장한다. 관리자모드의 애플리케이션에서 로컬 스토리지에 들어가면 현재 주소의 저장된 정보를 볼 수 있다. 로컬 스토리지는 장단점이 무엇일까? 장점:..

JWT의 필터를 만들고 나니 로그인에 적용하는 방법을 알지 못했다. 프로젝트를 진행하면서 컨트롤러, 서비스에서 로그인을 만들어야된다는 고정관념이 있었다. 왜? 내가 국비에서 세션으로 로그인을 만들 때 그렇게 만들어서 그랬던거 같다. 분명 JWT를 공부하면서 필터를 통해서 검증하는 것을 알게되었을텐데 하. JWT는 컨트롤러에서 파라미터를 확인하는 것이 아닌 필터를 통해서 파라미터를 확인한다. 필터검증은 일정 URL을 받았을 때 받은 파라미터 값으로 검증하는 것이다. 기본적인 URL은 /login이다. 여기서 나는 또 의문점이 생겼다. 도대체 어디에 /login이 있을까 SecurityConfig http .addFilterAt(new LoginFilter(authenticationManager(authen..

JWT 검증 필터 스프링 시큐리티 filter chain에 요청에 담긴 JWT를 검증하기 위한 커스텀 필터를 등록해야한다.해당 필터를 통한 요청 헤더 Authorization 키에 JWT가 존재하는 경우 JWT를 검증하고 강제로 SecurityContextHold에 세션을 생성한다. (이 세션은 STATELESS 상태로 관리되기 때문에 해당 요청이 끝나면 소멸된다.)JWTFilter 구현public class LoginFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager; private final JWTUtil jwtUtil; public Lo..

UserRepository (회원조회 메소드) public interface UserRepository extends JpaRepository { Boolean existsByUsername(String username); //username을 받아 DB 테이블에서 회원을 조회하는 메소드 작성 UserEntity findByUsername(String username); } CustomUserDetailsService (회원검색을 위한 메소드) @Service public class CustomUserDetailService implements UserDetailsService { private final UserRepository userRepository; public CustomUserDetailS..

스프링 시큐리티 필터 동작 원리 스프링 시큐리티는 클라이언트의 요청이 여러개의 필터를 거쳐 DispatcherServlet(Controller)으로 향하는 중간 필터에서 요청을 가로챈 후 검증(인증/인가)를 진행한다. - 클라이언트 요청 -> 서블릿 필터 -> 서블릿 (컨트롤러) - Delegation Filter Proxy 서블릿 컨테이너(톰캣)에 존재하는 필터 체인에 DelegationFilter을 등록한 뒤 모든 요청을 가로챈다. 가로챈 요청은 SecurityFilterChain에서 처리 후 상황에 따른 거부, 리다렉션, 서블릿으로 요청 전달을 진행한다. 로그인 로직 구현 목표 아이디, 비밀번호 검증을 위한 커스텀 필터 작성 DB에 저장되어 있는 회원 정보를 기반으로 검증할 로직 작성 로그인 성공시..

config 전체코드 @Configuration @EnableWebSecurity public class SecurityConfig { // 시큐리티를 통해서 검증을 할때는 해쉬로 암호화 시켜서 검증을 해야 한다. // 암호화를 위한 코드 @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { //csrf disable // JWT방식은 Stateless한 방식이기 때문에 csrf방식을 disable로 둔다. http .csrf((auth..
- Total
- Today
- Yesterday
- 해시
- 국비
- JPA
- 스택
- 그린대학교
- 공공데이터포탈
- CSS
- 정보처리기사
- form
- 덱
- static
- 김영한
- java
- 프로그래머스
- (롯데)기업맞춤형 프로젝트
- docker
- MySQL
- Queue
- Git
- 국비지원
- 자료구조
- deque
- 백준
- 오류
- 국비교육
- 인텔리제이
- wsl
- 메시지 오류
- JWT
- post-redirct-get
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |