멈추지 않는 기록

[일지] 250324 (월) 본문

웹 개발/Spring Boot

[일지] 250324 (월)

pangil_kim 2025. 3. 24. 22:09
728x90

1. Login

ID/PW를 Controller에서 받고, TokenFactory에게 부탁해서 토큰을 받고 RefreshToken을 Header에 담아서 반환했다.

-> 이 기능을 Spring에서는 AuthenticationFilter를 사용한다.

 

2. RF를 가지고 AT를 발급 받았다.

 

3. AT을 Header에 담아서 사용할 때 유효한 값인지 확인하는 인터셉터

-> 이 기능을 Spring에서는 AuthorizationFilter를 사용한다.

 


 

SecurityConfig 파일 생성하기 -> 패키지명 해당 프로젝트로 수정하기

 

build.gradle에서 security 사용을 위한 부분 주석 풀기

 

- (임시) ExternalProperties 객체에 값을 주입해서, 그것을 꺼내서 사용할 예정이다.

 

 


 

Security 새로운 패키지 생성

관련 파일 생성하기 + ExternalProperties  파일을 생성한다.

Import에 있어서 패키지명 해당 프로젝트로 수정하기

 

 

 

Exception 새로운 패키지 생성

관련 파일 생성하기

 


Spring Security에서는 User가 어떤 Role을 가지고 있는데 지정해줘야 한다.

role / userRole을 추가해야 한다.

 

UserRoleTyoe과 RoleType 도메일을 생성한다.

 

User 도메인에도 관련된 내용을 추가한다.

 


토큰 팩토리를 사용하지 않을 것이기에, 에러 발생하는 것에 대해서 어느정도 지워준다.

UserRepository를 수정

RoleType/UserRoleType Repository를 생성하기


 

 

SecurityConfig.java

1. AuthService = tokenFactory와 동일

2. ExternalProperties : 보안상 유지하려고 외부 파일을 가져온다.

3. byCryptPasswordEncoder : 암호화 (비밀번호를 암호화한다)

4. filterChain : 스프링 시큐리티 관련해서 권한을 지정한다. 

5. CustomDsl : 시큐리티 설정의 한 몸이라 생각하자. (로그인에서 사용하는 authenticationFilter와 AuthrizationFilter를 추가.

- 이게 () 할 때 유일한 방식이다.

 

CorsFilterConfiguration.java

- corsFilter : 허용하는 부분들에 대한 선언.

 


User : Spring Security를 사용하기 위해서 Role을 1~N개를 가져야 한다. Role이 없으면 사용할 수가 없다.

RoleType : Role을 지정하기 위한 도메인. 

UserRoleType : 


Security 패키지의 폴더 탐색


jwtAutenticationFilter.java

1. attemptAuthentication : request에 username/password있는지 확인 -> 실존하는 고객인지 확인,

- authentication이라는 객체를 만들어야 한다.

- 리턴함과 동시에 호출되는 함수가 successfulAuthenticiation

2. successfulAuthenticiation

- principalDetails를 생성한다. (user 정보가 담겨 있는 친구, user라는 필드가 있다. getUser, getUserID -> RefreshToken)

 

jwtAuthrizationFilter.java

AccessToken을 가지고 올 때마다 지나가는 친구다.

 

doFilterInternal : AccessToken값이 있는지 없는지 확인한다. prefix를 떼놓은 accessToken으로 verify를 한다. 가져온 userId가 실존하는 사용자인지 확인.

 

 

Principal -> User -> User_Id

728x90