Spring Security 흐름
- 사용자는 회원가입을 진행한다.
- 해당 URI 요청은 permitAll 처리하고 사용자의 입력값으로 service에서 회원가입을 진행한다.
- 사용자의 정보를 저장할 때 비밀번호를 암호화하여 저장한다.
- PasswordEncoder를 사용하여 비밀번호를 암호화 한 후 저장한다.
- 사용자는 로그인을 진행한다.
- 해당 URI 요청은 permitAll 처리하고 사용자의 입력값으로 service에서 회원 인증을 진행한다. (비밀번호 일치여부 등)
- 사용자 인증을 성공하면 사용자의 정보를 사용하여 JWT 토큰을 생성하고 Header에 추가하여 반환한다. Client 는 이를 쿠키저장소에 저장한다.
- 사용자는 게시글 작성과 같은 요청을 진행할 때 발급받은 JWT 토큰을 같이 보낸다.
- 서버는 JWT 토큰을 검증하고 토큰의 정보를 사용하여 사용자의 인증을 진행해주는 Spring Security 에 등록한 Custom Security Filter 를 사용하여 인증/인가를 처리한다.
- Custom Security Filter에서 SecurityContextHolder 에 인증을 완료한 사용자의 상세 정보를 저장하는데 이를 통해 Spring Security 에 인증이 완료 되었다는 것을 알려준다.
OAuth
- Open Standard for Authorization 의 줄임말로 개방형 Authorization의 표준형
- JSON형식으로 API 허가 목적으로 개발된 HTTP 기반의 보안 프로토콜
- 사용하려는 웹사이트 및 애플리케이션에 비밀번호를 제공하지 않고 접근 권한을 부여 받을 수 있게 해주는 공통적 수단
- 위 그림은 인증/인가의 위임방법을 제공 -> 클라이언트에게 접근토큰(Access Token)을 발급 하는 구조
@Authentication -> HttpSecurity
.authorizeRequests() : 요청에 대한 권한 지정
.anyRequest().authenticated() : 어떠한 요청이든지 인증되어야 함
.formLogin() : 폼을 통한 로그인 이용
.antMatchers.hasRole() 또는 .antMatchers().access() : 해당 경로에 대해 특정 권한을 가져야 접근 가능
.antMathcher().
- anonymous() : 인증되지 않은 사용자가 접근할 수 있습니다.
- authenticated() : 인증된 사용자만 접근할 수 있습니다.
- fullyAuthenticated() : 완전히 인증된 사용자만 접근할 수 있습니다(?)
- hasRole() or hasAnyRole() : 특정 권한을 가지는 사용자만 접근할 수 있습니다.
- hasAuthority() or hasAnyAuthority()\ : 특정 권한을 가지는 사용자만 접근할 수 있습니다.
- hasIpAddress() : 특정 아이피 주소를 가지는 사용자만 접근할 수 있습니다.
- access() : SpEL 표현식에 의한 결과에 따라 접근할 수 있습니다.
- not() : 접근 제한 기능을 해제
- permitAll() or denyAll() : 접근을 전부 허용하거나 제한
- rememberMe() : 리멤버 기능을 통해 로그인한 사용자만 접근 가능
[Spring/Security] 초보자가 이해하는 Spring Security - 퍼옴
https://okky.kr/article/382738 # 초보자가 이해하는 Spring Security (좋은 글)저의 스프링 시큐리티 관련 예제는 깃허브 에서 제공합니다. (주석이 포함된 프로젝트는 주석이 너무 지저분하여 제외...)1. 스
postitforhooney.tistory.com
JUnit
단위 테스트 도구;
프로그램을 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 검사하고 이를 통해 문제 발생시 어느 부분이 잘못되었는지 정확하고 빠르게 확인 할 수 있게 해줌
TDD Test-Driven Development
- 테스트 코드를 먼저 작성하고 실제 동작하는 코드를 개발
- 설계 -> 테스트 -> 개발 순서로 개발함
- 단계별로 테스트 코드를 나누어서 작성함
- Given - 준비
- When - 실행
- Then - 검증
Mock Object
- 가짜 객체를 만들어서 분리해서 테스트함
- Mokito mock을 사용해서 가짜 객체 이용 테스트
- @Mock 어노테이션으로 Mocking할 객체를 주입 -> 서비스 리포지터리에 가짜 객체가 들어감
- when() 메서드를 통해 mocking한 객체들이 특정 조건으로 특정 메서드 호출 시 동작하도록 지정
AOP Aspect Oriented Programming
- 핵심기능과 부가기능이 있으면 변경이 쉽게 AOP를 이용해서 부가기능을 모듈화 한다.
- 부가기능은 핵심기능과 관점(Aspect)가 달라서
- 핵심기능과 분리해서 부가기능 중심으로 설계 하고 구현
- 스프링 AOP 어노테이션
- @Around: '핵심기능' 수행 전과 후 (@Before + @After)
- @Before: '핵심기능' 호출 전 (ex. Client 의 입력값 Validation 수행)
- @After: '핵심기능' 수행 성공/실패 여부와 상관없이 언제나 동작 (try, catch 의 finally() 처럼 동작)
- @AfterReturning: '핵심기능' 호출 성공 시 (함수의 Return 값 사용 가능)
- @AfterThrowing: '핵심기능' 호출 실패 시. 즉, 예외 (Exception) 가 발생한 경우만 동작 (ex. 예외가 발생했을 때 개발자에게 email 이나 SMS 보냄)
심화 주차 강의 완강
위의 내용은 강의를 요약만 한것이고 강의는 스프링을 요약의 요약의 요약을 한 것이라서 공부는 더 해야한다.
'TIL' 카테고리의 다른 글
TIL CRUD 마스터의 길 221212 (0) | 2022.12.13 |
---|---|
TIL/WIL ORM SQL MVC 부트캠프 1+4주차 회고 221211 (1) | 2022.12.11 |
TIL Spring Security 221209 (0) | 2022.12.10 |
TIL 김영한 스프링 강의 221208 (0) | 2022.12.09 |
TIL 유용한 IntelliJ 단축키 정리 221207 (0) | 2022.12.08 |