본문 바로가기

개발 일지/TIL

[ #26 ] TIL

✏️ 0522      


Spring 숙련 3주차 강의


Spring 숙련 강의

 

 

 

 

미완성

 

 

 

 

 

 

 

 

===============
회원가입 구현 1-7
----------------
패스워드 암호화 이해
회원 등록 시 '비밀번호'는 사용자가 입력한 문자 그대로 DB 에 등록하면  안 됩니다.
'정보통신망법, 개인정보보호법' 에 의해 비밀번호 암호화(Encryption)가 의무

암호화 후 패스워드 저장이 필요
평문 → (암호화 알고리즘) → 암호문
DB 에 있는 앨리스의 패스워드 정보를 갈취하더라도 실제 암호를 알 수 없습니다
그래서 복호화가 불가능한 '단방향' 암호 알고리즘 사용이 필요

- 양방향 암호 알고리즘
    - 암호화: 평문 → **(암호화 알고리즘)** → 암호문
    - 복호화: 암호문 → (암호화 알고리즘) → 평문
- 단방향 암호 알고리즘
    - 암호화: 평문 → **(암호화 알고리즘)** → 암호문
    - 복호화: **불가** (~~암호문 → (암호화 알고리즘) → 평문)


User
SignupRequestDto
Homecontroller
UserController
UserService
UserRepository
===============
로그인 구현 JWT 1-8
-------------------
LoginRequestDto
UserService
===============
필터 1-9
------------------
Filter란 Web 애플리케이션에서 관리되는 영역으로 Client로 부터 오는 요청과 응답에 대해 최초/최종 단계의 위치이며 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있
주로 범용적으로 처리해야 하는 작업들, 예를들어 로깅 및 보안 처리에 활용
또한 인증, 인가와 관련된 로직들을 처리할
Filter를 사용하면 인증, 인가와 관련된 로직을 비즈니스 로직과 분리하여 관리할 수 있다는 장점

Filter는 한 개만 존재하는 것이 아니라 이렇게 여러 개가 Chain 형식으로 묶여서 처리될 수 있습니다.

요청을 했을 때 들어오는 그 URL를 Logging 처리해주는 Lgging Filter
인증 및 인가를 처리하는 AuthFilter
LoggingFilter
AuthFiter
JwtUtil
============
Spring Secuirty 프레임워크 1-10
--------------------------------
Spring Security' 프레임워크는 Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해 줌으로써 개발의 수고를 덜어 준다
Spring' 프레임워크가 웹 서버 구현에 편의를 제공해 주는 것과 같다

Spring Security 는 Filter 기반으로 동작한다
Session 방식으로 동작 / 기본 defualt 로그인을 제공
@Component 부분 주석처리

AuthFilter 클래스의 if 문을 사용해서
인증,인가를 처리하던 것과 다르게
Securtiy 를 사용해서 작성하면 훨씬 더 간결하게 처리할 수 있다

if (StringUtils.hasText(url) &&
                (url.startsWith("/api/user") || url.startsWith("/css") || url.startsWith("/js"))
        ) 
이 코드를
.requestMatchers("/api/user/**").permitAll() 이렇게 한번에 줄이기 가능

강의자료에 추가로 정리할 내용 많음
UsernamePasswordAuthenticationFilter

WebSecurityConfig
================
Srping Secuirty 로그인 1-11 
-----------------------------
- Spring Security 역할
인증/인가
성공 시: Controller 로 Client 요청 전달
 Client 요청 + 사용자 정보 (UserDetails)
실패 시: Controller 로 Client 요청 전달되지 않음
Client 에게 Error Response 보냄


UserDetailsServiceImpl
UserDetailsImpl
파일을 커스텀 함으로써
기존 시큐리티에서 제공하던 로그인 페이지가 아닌
우리가 만들었던 페이지로 나오고
비밀번호를 받아서 사용하는것이 아닌
데이터베이스에 저장되어있는 정보를 가져와서
로그인 할 수 있게 된다

@AuthenticationPrincipal
Authentication의 Principal 에 저장된 UserDetailsImpl을 가져올 수 있다
UserDetailsImpl에 저장된 인증된 사용자인 User 객체를 사용할 수 있다

WebSecurityConfig
UserDetailsServiceImpl
UserDetailsImpl
ProductController
==================
Spring Security JWT 로그인 1-12
-------------------------------
// 기본 설정인 Session 방식은 사용하지 않고 JWT 방식을 사용하기 위한 설정
        http.sessionManagement((sessionManagement) ->
                sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        );

JwtAuthenticationFilter
JwtAuthorizationFilter
HomeController
=================
접근 불가 페이지 만들기 1-13
--------------------------------
Spring Security에 "권한 (Authority)" 설정방법
회원 상세정보 (UserDetailsImpl) 를 통해 "권한 (Authority)" 설정 가능
권한 이름규칙
ROLE_" 로 시작해야 함
예) "ADMIN" 권한 부여 →  "ROLE_ADMIN"
 "USER" 권한 부여 → "ROLE_USER

Spring Security를 이용한 API 별 권한 제어 방법
Controller 에 "@Secured" 애너테이션으로 권한 설정이 가능합니다.
@Secured("권한 이름") 선언

접근 불가 페이지 적용
@Secured 애너테이션 활성화 방법
@EnableGlobalMethodSecurity(securedEnabled = true) // @Secured 애너테이션 활성화


WebSecurityConfig

 

 

 

 

 

 

'개발 일지 > TIL' 카테고리의 다른 글

[ #28 ] TIL  (0) 2024.05.24
[ #27 ] TIL  (2) 2024.05.23
[ #25 ] TIL  (0) 2024.05.21
[ #24 ] TIL  (2) 2024.05.20
[ #23 ] TIL  (3) 2024.05.19