Framework/Spring Boot
-
Properties 설정으로 Configuration 객체 생성하기Framework/Spring Boot 2024. 1. 25. 22:19
Properties 설정으로 Configuration 객체 생성하기 .yml 혹은 .properties 사용하여 개발 환경을 설정하는데 이 설정을 소스 코드에서 활용을 해야하는 경우가 있다. 내 경우에는 jwt 생성할 때 암호키(secret-key)와 만료 시간(expire-length)를 설정하고 @Value 어노테이션을 사용해서 값을 주입해 사용했다. 그런데 이렇게 어노테이션으로 주입하는 경우 문제가 발생할 수 있다. - final 선언을 하지 않으면 값이 언제든지 변경될 수 있음 - 사용하는 클래스마다 선언을 하기 때문에 오타같은 휴먼 에러가 발생할 수 있음 - 변경이 필요한 경우 여러 위치에서 수정이 필요함 이러한 문제를 해결하기 위해 아래의 소스 코드를 리팩토링하려고 했다. @Component ..
-
Spring Security #3 - ROLE 적용하기Framework/Spring Boot 2024. 1. 1. 23:22
Spring Security ROLE 적용하기 Spring Security에 Role을 추가해서 요청 시 ROLE_USER 인 경우에만 컨트롤러에 접근 가능하도록 설정을 하려고 했었다. 아래가 바로 그 소스이다. 문제는 .anyRequest().hasRole("USER") 이 부분이다. 지금 구현한 동작 방식으로는 필터 통과 시에 httpRequest header에서 토큰을 파싱하고 유효한 토큰인 경우 User에게 모두 "ROLE_USER"를 부여하도록 되어있어 hasRole을 지나갈 수 있을 줄 알았다. package com.example.tdd.board.web.config; import lombok.RequiredArgsConstructor; import org.springframework.cont..
-
Spring Security #2 - JwtRequestFilter와 Preflight CORS 문제Framework/Spring Boot 2023. 11. 26. 21:16
JwtRequestFilter 적용 후 Preflight CORS 문제 발생 지난번 Spring Security #1 내용에서 스프링 시큐리티 Config 설정하면서 JwtRequestFilter를 적용했었다. 그 후에 클라이언트 프로젝트를 실행하고 http 요청을 보냈는데 기존에 해결을 했었던 CORS 오류가 다시 발생했다. .mvcMatchers(HttpMethod.OPTIONS, "/**").permitAll() 기존에 위와 같이 추가해서 HttpMethod.OPTIONS 인 경우에 모두 허용한 뒤로 '200 OK'로 응답이 왔었는데...! 문제는 .addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); 해당 소스..
-
Spring Security #1 - JWT 로그인 방식 적용Framework/Spring Boot 2023. 11. 9. 08:52
Spring Security 모놀리식 아키텍쳐에서 마이크로서비스 아키텍쳐로 모놀리식 아키텍쳐란 하나의 통합된 프로젝트로 소프트웨어가 구성되는 것으로 모든 프로세스가 단일 서비스로 실행된다. 전통적인 소프트웨어 개발 모델로 결합도와 의존도가 높은 것이 특징이다. 기업들은 최근 마이크로서비스 아키텍처, 즉 MSA 구조를 활용하는 추세이고, 채용 요건의 우대사항에 MSA 유경험자가 기재되어 있는 곳이 많아 기존의 MA 구조를 MSA 구조로 변경해보고자 했다. Spring Security를 사용한 OAuth2.0 로그인 구현은 모놀리식의 구조 예시가 많다. 그 이유는 Spring Security가 OAuth2.0 흐름을 처리하는데 필요한 기능이 기본 설정이 되어있기 때문이다. 예를 들면, 인가 코드를 받아오고,..