TIL

2022.08.03.TIL

rootzero 2022. 8. 4. 01:45

springcore파일에서 security디렉토리 속 파일들 역할 정리

 

filter:

  • FormLoginFilter: 토큰 없이 아이디 비밀번호로 로그인 시도시 동작, WebSecurityConfig에서 해당 url이 요청시 불러지며 UsernamePasswordAuthenticationToken에 username, password를 담아 Authentication 매니저에게 전달
  • JwtAuthFilter: 토큰을 가진채로 인가가 필요한 서비스 요청 시 작동, (생성자): request를 받아 헤더를 뽑은 후 JwtPreProcessingToken에 HeaderTokenExtracter로 헤더에서 bearer를 제거한 jwt토큰을 담음, 그 후 매니저에게 autenticate로 전달함 / (성공시) SecurityContext에 토큰을 담아 매니처가 처리하게 함/ (실패시) 토큰값을 제거 후 unsuccessfulAuthentication에 실패했다고 전달

provider:

  • FormLoginAuthProvider: 필터에서 authentication으로 UsernamePasswordAuthenticationToken을 FormLoginFilter으로부터 건내받아 DB로 username,password검증 후 UserDetailsService에서 username을 통해 user 정보를 찾아서 UserDetailsImpl에 담아 UsernamePasswordAuthenticationToken으로 매니저에게 전달.(성공 시 FormLoginSuccessHandler에게 감)
  • JWTAuthProvider: JwtAuthFilter로부터 토큰을 건내받아 토큰을 해체하여 username을 찾음, username으로 user정보 찾아서 UserDetailsImpl에 저장 후 UsernamePasswordAuthenticationToken에 담아 리턴

jwt:

  • HeaderTokenExtractor: 헤더가 jwt구조가 맞는지 확인하고 bearer부분을 잘라내서 리턴(JwtAuthFilter에서 사용
  • JwtDecoder: 토큰을 복호화 해서 유효한지 검증 후 username을 반환 (JWTAuthProvider에서 사용)
  • JwtPreProcessingToken: 헤더에서 뽑은 jwt토큰을 담아두는 객체 (JWTAuthFilter에서 사용)
  • JwtTokenUtils: jwt토큰을 생성( FormLoginSuccessHandler에서 사용)

FilterSkipMatcher: security를 스킵할 내용을 담아 JwtAuthFilter에게 전달하여 통과시킴

FormLoginSuccessHandler: Provider에게 값들을 전달받아 JwtTokenUtils로 jwt토큰을 만들어 response의 헤더에 담아 리턴

UserDetailsImpl: 시큐리티에 사용되는 Dto

UserDetailsServiceImpl: 시큐리티에 사용되는 user service

WebSecurityConfig: 시큐리티의 설정 

 

 

@Controller로 만들면 view가 무조건 있어야 한다(timeleaf 필요)

 

 

 

 

이걸로 하면 안되는거 같아서 다 갈아엎고 다시만듬

AccessToken + RefreshTokken

출처: https://tansfil.tistory.com/59

참고한 자료

https://bcp0109.tistory.com/301

 

Spring Security 와 JWT 겉핥기

Introduction 이 글에서는 Spring Boot + JWT + Security 를 사용해서 회원가입/로그인 로직을 구현했습니다. JWT 와 Spring Security 코드는 인프런 Spring Boot JWT Tutorial (정은구) 강의를 수강하면서 만들고..

bcp0109.tistory.com

회원가입/로그인까지 구현함

구현시 사용된 정규표현식으로 패턴 찾기: https://hbase.tistory.com/160

 

[Java] 정규표현식 사용법 및 예제 - Pattern, Matcher

자바에서 정규표현식(Regular Expression)'을 사용해보자. 1. 정규표현식(Regular Expression) 정규표현식 혹은 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어다. 정규 표현식은

hbase.tistory.com

응답시 헤더 추가하기: https://www.techiedelight.com/ko/add-header-to-response-spring-boot/

 

Spring Boot의 특정 응답에 헤더 추가

이 게시물은 Spring Boot 애플리케이션에서 특정 응답에 헤더를 추가하는 방법에 대해 설명합니다. Spring Boot 애플리케이션의 특정 응답에 사용자 정의 헤더를 추가하는 방법에는 여러 가지가 있습

www.techiedelight.com

doFilter란: https://atoz-develop.tistory.com/entry/Servlet-Filter-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

Servlet Filter 사용하기

Servlet Filter 사용하기 Filter의 개념과 사용하는 이유 필터는 서블릿 실행 전, 후에 어떤 작업을 하고자 할때 사용한다. 예를 들어 클라이언트가 보낸 데이터의 암호를 해제한다거나, 서블릿이 실

atoz-develop.tistory.com

빌더패턴: https://mangkyu.tistory.com/163

 

[Java] 빌더 패턴(Builder Pattern)을 사용해야 하는 이유

객체를 생성하기 위해서는 생성자 패턴, 정적 메소드 패턴, 수정자 패턴, 빌더 패턴 등을 사용할 수 있습니다. 개인적으로 객체를 생성할 때에는 반드시 빌더 패턴을 사용해야 한다고 생각하는

mangkyu.tistory.com

stream에서 사용되는 것들: https://dpdpwl.tistory.com/81

 

[Java]자바 스트림Stream(map,filter,sorted / collect,foreach)

자바8부터 Stream 을 사용 할 수 있습니다. 기존에 자바 컬렉션이나 배열의 원소를 가공할떄, for문, foreach 등으로 원소 하나씩 골라내여 가공을 하였다면, Stream 을 이용하여 람다함수형식으로 간결

dpdpwl.tistory.com

https://codechacha.com/ko/java8-stream-collect/#:~:text=collect()%20%EB%8A%94%20Stream%EC%9D%98,%EC%96%B4%EB%96%A4%20%EC%9E%90%EB%A3%8C%ED%98%95%EC%9C%BC%EB%A1%9C%20%EB%A7%8C%EB%93%A4%EC%96%B4%20%EC%A4%8D%EB%8B%88%EB%8B%A4. 

 

Java8의 Stream Collect 사용 방법 및 예제

Collect는 Stream의 데이터를 변형 등의 처리를 하고 원하는 자료형으로 변환해 줍니다. List 또는 Set 자료형으로 변환하거나, joining 또는 Sorting하여 1개의 객체를 리턴하기도 합니다. 또는 아이템들

codechacha.com