Spring

· Spring
현재 JSESSIONID로 로그인된 회원 인가 작업을 진행한다.JSESSIONID는 Spring Server로부터 Set-Cookie로 받아오는데, 이 때 JSESSION 쿠키의 만료 시간은 Session과 동일하다.즉, 브라우저를 종료하거나 로그아웃 하게 되면 만료되는 것이다. 한편, jwt토큰을 이용하면 흔히 AccessToken과 함께 RefreshToken을 이용하여 보안을 강화하고, 로그인 시간을 충분히 확보한다.JSESSIONID로 로그인을 하게되니, jwt토큰의 RefreshToken과 같은 역할이 필요했다. Remember-meSpring Security는 Remember-me라는 기능을 제공하는데, 이는 Session의 짧은 만료 기간을 보완해준다.사용자가 로그인을 성공하면, 기존의 JS..
· Spring
필터 요청 - 중복 가능 클라이언트가 다음과 같이 요청을 한다. http://localhost:8080/api/list?departmentFilter=A&departmentFilter=B&genderFilter=M&order=AGE 쿼리스트링을 살펴보면, departmentFilter 2개, genderFilter 1개, order 1개이다. 쿼리스트링의 모든 값 중에서 하나라도 해당하면 조회가 가능하도록 설계해보자. 먼저, Controller에서 요청 받는 부분이다. Controller.java @GetMapping("/list") public ResponseEntity personnelList( @RequestParam(value = "departmentFilter", required = false)..
· Spring
MSA 서비스의 각 application.yml 설정 값을 Spring Cloud Config 서버에서 요청 받아 오는 방식으로 구성하는 도중 보안 관련 문제점이 있었고, 이를 해결한 방법을 소개하고자 한다. 문제 상황 Config 서버의 URL을 직접 주소창에 입력하여 요청하면, 복호화 된 설정 값이 그대로 노출 된다는 문제점이 있다. config 서버에 다음과 같은 요청을 보내면 모든 설정 값을 볼 수 있다. http://publicIP:8888/member/prod Config 서버에서 요청 받는 설정 값은 DB Password, AWS secret key와 같은 민감 정보가 들어있기 때문에 url 요청에 의한 조회를 방지해야 한다. AWS VPC AWS VPC는 aws 사용자의 전용 가상 네트워크..
· Spring
서비스에 대한 테스트를 진행할 때 Redis 서버가 실행 중이지 않아 테스트 시 Redis 서버를 구동시켜야 하는 불편함이 있다. 테스트 환경에 대한 내장 Redis를 구축하여 원활한 테스트를 진행하고자 한다. Build.gradle implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis', version: '2.4.10' implementation group: 'it.ozimov', name: 'embedded-redis', version: '0.7.3' EmbeddedRedisConfig.java import java.io.IOException; import lombok.extern.slf4j.Slf..
· Spring
Spring Config 서버를 구축하여 여러 서버에서 활용되는 공통된 설정값을 관리할 수 있다. 공통된 설정 파일들은 로컬 파일 시스템, 로컬 git 레포지토리 또는 remote git 레포지토리에 올려서 관리 할 수 있음 https://docs.spring.io/spring-cloud-config/docs/current/reference/html/ 현재 진행 중인 프로젝트에서는 remote git private 레포지토리에 설정파일을 올려 관리하고 있다. 민감 정보에 대한 보안을 위해 private 레포지토리로 구성하였고, 대칭키를 이용하여 설정값을 암호화 Refresh 설정 파일이 외부에서 관리되기 때문에 서버가 실행되고 있는 도중 설정 값이 변경될 수 있다. 하지만 설정 파일이 변경되어도 설정 클..
· Spring
Spring Cloud Gateway는 @ControllerAdvice를 지원하지 않아 ErrorWebExceptionHandler를 구현해야한다. ErrorExceptionConfig.java@Configuration@RequiredArgsConstructorpublic class ErrorExceptionConfig { private final ObjectMapper objectMapper; @Bean public ErrorWebExceptionHandler globalExceptionHandler(){ return new GlobalExceptionHandler(objectMapper); }}ErrorWebExceptionHandler를 bean으로 등록하면 에러핸..
· Spring
모놀리식 구조의 서비스를 MSA로 전환하는 프로젝트를 진행하면서 로그인되어 있는 회원의 정보를 인식할 수 없는 상황이 발생했다. 기존 로그인 회원 정보 조회 코드@Slf4jpublic class SecurityUtil { private SecurityUtil() { } // SecurityContext 에 유저 정보가 저장되는 시점 // Request 가 들어올 때 JwtFilter 의 doFilter 에서 저장 public static Long getCurrentMemberId() throws NumberFormatException{ final Authentication authentication = SecurityContextHolder.getContext().get..
· Spring
DispatcherServlet? Spring 공식문서에 따르면 DispatcherServlet 정의는 다음과 같다. Spring MVC, as many other web frameworks, is designed around the front controller pattern where a central Servlet, the DispatcherServlet, provides a shared algorithm for request processing, while actual work is performed by configurable delegate components. This model is flexible and supports diverse workflows. The DispatcherServl..
horing
'Spring' 카테고리의 글 목록