스프링 심화 주차
Spring Security
filter 들이 정말 많고 이름이 헷갈린다
책이나 블로그에 UserDetails 같은 인터페이스들이 많았지만 다 비슷비슷하게 생겨서 정신이 없었다.
SecurityContextHolderFilter
: SecurityContext 객체를 생성, 저장, 조회
SecurityContextHolder.get ~~ 으로 저장된 유저 정보를 바로 꺼내왔었다.
CSRF
: 유저가 특정 이미지 등을 클릭할 때 서버측으로 의도치 않은 http 요청을 전송하게 하여 공격하는 걸 막는 필터
LogoutFilter
: 설정된 로그아웃 URL 로 요청이오면 세션 무효화, 쿠키 삭제, Context 비움
swagger 상에서 authorization 로그아웃 해준거랑 같은건가?
UsernamePasswordAuthenticationFilter
: 설정된 로그인 URL 로 요청이 왔을 때 각각을 비교하여 실제 인증 수행, 인증에 성공한 Authentiatication 저장
// 인증 정보 설정
override fun doFilterInternal(
request: HttpServletRequest,
response: HttpServletResponse,
filterChain: FilterChain
) {
val token = parseBearerToken(request) // 토큰 추출
val user = parseUserSpecification(token) // 사용자 정보 추출
UsernamePasswordAuthenticationToken.authenticated(user, token, user.authorities) // 인증된 사용자를 나타내는 토큰 생성
.apply { details = WebAuthenticationDetails(request) } // 요청날린 client 또는 프록시의 ip 주소와 세션 id 저장
.also { SecurityContextHolder.getContext().authentication = it } // sercurityContextHolder 에 인증 정보 저장
filterChain.doFilter(request, response) // 다음 필터
}
DefaultLoginPageGeneratingFilter / Logout
: 로그인 로그아웃 페이지 띄우는 필터
SecurityContextHolderAwareRequestFilter
: Context 에 저장된 정보로부터 Request 를 구성
Request 를 구성?? 잘 모르겠다.
AnonymousAuthenticationFilter
: 익명사용자에 대한 인증 처리
토큰 유효하지 않을 때 왜 굳이 설정하나 했었는데 익명처리함으로써 다른 로직을 만들어줄 수도 있어서 그런건가?
ExceptionTranslationFilter
: 인가예외와 인증예외 처리
인증인가예외처리 어떻게 하나 싶었는데 이런 필터도 있었다.
AuthorizationFilter
: 권한을 확인
사용안하는 필터들은 FilterChain 으로 꺼놓을 수 있다.!
JWT
Jwt 검증 / 생성
검증은 생성한 jwt 가 맞는지, 만료기간이 지나지 않았는지 확인
생성할 때는 알고리즘을 설정하고 Claim 을 지정!
custom claim 으로 role 을 설정할 수 있다. => 권한 부여 가능
@Value
: yml 파일 속 작성한 값 주입 가능
@ConfigurationProperties
: 한 번에 data 클래스로 값들을 받아올 수 있음 (참조)
로그인을 구현할 때
Spring Security의 filter 를 사용하여 구현할 수 있다고 한다.
=> 모든 인증을 filter 를 사용하여 구현
PasswordEncoder() 를 통해 암호화
헤더속 JWT
{ "Authorization": Bearer {JWT} }
그래서 파싱할 때 헤더의 authorization 을 받아와서 앞에 Bearer 을 제거해줬었다.
인증하는 필터의 핵심은 doFilter 를 구현하는 것
Spring Security Authentication
인증 실패 시
=> 401이 나와야 한다!!!!
403은 인증은 되었지만 권한이 없을 때 ( 인가에 실패할 때) 쓴다.
❓403이 나오는 이유
스프링 시큐리티 에서는 최종적으로 ExceptionTranslationFilter 를 거치는데
여기서 인증이 되지 않았거나, AuthenticationException 이 발생하면
AuthenticationEntryPoint 에 처리 역할을 위임하게 된다.
이 때 시큐리티에서는 기본적으로 Http403ForbiddenEntryPoint 가 이 역할을 하기 때문
인증 예외처리
AuthenticationEntryPoint 을 등록, SecurityConfig 로 설정
AWS Amazon Web Services
클라우드 컴퓨팅 서비스
일래스틱 빈스토크
: EC2, 오토 스케일링 그룹, 로드 밸런서, RDS 를 한 번에 설정하는 서비스
❓애플리케이션 소스의 번들 형태
번들 형태 : 주로 SW 애플리케이션을 패키징하고 배포하기 위한 구조!
애플리케이션 번들은 실행 가능한 코드, 리소스, 설정 파일 등을 포함하는 디렉토리 또는 아카이브.
안드로이드 폰 사용할 때 자주 보던 APK 같은거!
와 왜이렇게 피곤하지 ??
교안을 프린트해서 보고싶은데 라이트모드로 전환이 안되길래 그냥 노트북 화면으로 봤더니 눈알 빠질 것 같다😰😰
'왕초보일지' 카테고리의 다른 글
240118 TIL | (0) | 2024.01.18 |
---|---|
240117 TIL | 시큐리티 예외처리, queryDSL (0) | 2024.01.17 |
240113 TIL | (1) | 2024.01.13 |
240112 TIL | Co-Ha 내가 구현한 기능 공부, 기록 (1) | 2024.01.12 |
240111 TIL | (3) | 2024.01.11 |