목록SPRING (17)
꾸물꾸물 졔의 개발공부
사용자가 로그인 하면, accessToken 과 refreshToken 을 발급하여 응답하였고, 서버에서는 refreshToken 을 사용자 아이디와 함께 Redis 에 저장해 두었다. 사용자가 로그아웃 요청을 하게 되면, accessToken 의 남은 시간을 계산 하여 redis 에 블랙리스트로 저장하였고, refreshToken 은 레디스에서 삭제하였다. AuthController.java - 로그아웃처리 컨트롤러, 레디스에 저장 및 삭제만 하면 되기때문에 컨트롤러에서 처리하였음 @PostMapping("/logout") public String userLogout(@RequestBody UserLogoutRequest logoutInfo) throws Exception{ // redis 에서 ref..

내가 한 프로젝트 구조는 , 클라이언트의 요청이 들어오면 서비스 서버가 일차적으로 요청을 받고, 회원의 개인정보와 관련없는 단순 비즈니스 로직은 서비스 서버단에서 처리 . 그 외의 개인정보와 관련된 USER 데이터 는 인증서버에서 처리하도록 하였다. JWT 필터는 인증서버에 등록해놓았다. - WebClient 로 서버 간 통신을 하고 있는데, 필터에서 토큰 유효성에 대한 예외가 발생하면 어떻게 처리하여 서비스 서버로 넘기고 클라이언트에게 응답 할 수 있을까 ? ▶ 필터에서 예외를 발생시키면, AuthenticationEntryPoint에서 catch 하고, 또 예외를 발생시켜 webClient 를 전송한 곳 ( 서비스 서버) 에서 catch 하도록 하였다 . if(exception.equals(Error..
이전포스팅 에서 JWT 필터를 적용시켜, 해당 토큰이 유효한지 검사하도록 하였다 . 토큰확인 과정에서 , 토큰의 유효기간이 지났거나 토큰의 형태가 아닌 값이라면 예외를 발생시켜, 어딘가에서 잡아서 클라이언트에게 응답하도록 할 것이다 . 이번 포스팅에서는, 예외를 발생시켜서, 응답객체를 만들어 보았다. try { //앞부분을 떼어내고 토큰값 추출, 인증정보얻어오기 Authentication authentication = getAuthentication(request); // jwt 토큰으로 부터 획득한 인증 정보(authentication) 설정. SecurityContextHolder.getContext().setAuthentication(authentication); }catch(TokenExpired..

JWT(1)포스팅에서 사용자 로그인시, access 토큰과 refresh 토큰을 발급해 주었고, JWT(2)포스팅에서 refresh 토큰의 유효기간 만큼 redis 에 저장했다. 나는, 회원정보 조회나 수정 또는 회원탈퇴와 같이 사용자정보 확인의 보안 절차가 필요한 과정에서는 토큰을 검사하여 유효한 사용자만 가능하도록 설정하고 싶었다. ▶ 내가 설계한 프로젝트의 구조는 클라이언트의 요청을 서비스 서버에서 받고, 회원관리와 같이 사용자 개인정보 관련 로직은 인증서버에서 처리하도록 하였다. 나는 인증서버에 토큰 검사를 위한 필터를 적용하려고 한다. JwtTokeUtil.java - 토큰을 생성/검증/에러 핸들링 하는 파일 ▶ getVerifier() //토큰 검증기 public static JWTVerifi..
이전 포스팅에서 로그인 요청한 사용자에게 access , refresh 토큰을 발급하였다. 사용자는 AccessToken 을 가지고 있다가, 유효기간이 만료되면 재발급 요청을 한다. 그때 refreshToken 을 사용하게 되는데, Refresh Token은 로그인 성공시 발급하면서 저장소에 저장하여 관리된다. 저장소를 Redis 로 하여 저장해보자. + redis를 설치하여, 서버에 올려두었고 redis cli 를 통해서 접근하였다. build.gradle implementation 'org.springframework.boot:spring-boot-starter-data-redis' application.properties #redis spring.redis.host=`호스트번호` spring.red..
1. 사용자가 id 와 password 를 이용하여, 로그인 요청을 보낸다. 2. id 와 password 가 올바른 값이라면, 해당 유저의 정보로 accessToken 과 refreshToken 을 발급한다. 3. 클라이언트에게 응답 build.gradle implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.auth0:java-jwt:4.0.0' implementation 'io.jsonwebtoken:jjwt-api:0.11.2' implementation 'io.jsonwe..

네이버 SMTP Server 이용 : ( 인증메일을 보낼 주소의 ) 네이버 메일 > 환경설정에 들어가서, POP3/SMTP를 사용모드로 바꿔준다. build.grade implementation 'org.springframework.boot:spring-boot-starter-mail' MailConfig.java : 이메일 인증을 위한 설정파일 @Configuration public class MailConfig { @Bean public JavaMailSender javaMailService() { JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); javaMailSender.setHost("smtp.naver.com"); javaMailSe..
Cache ? 자주 사용하는 데이터를 저장해서 재활용 하는 기술 캐시는 데이터 집합을 고속 데이터 스토리지 저장한다. 따라서, 이후에 해당 데이터에 대한 요청이 있을 경우, 원본 스토리지 위치로 데이터를 엑세스 할 때보다 더 빠르게 접근이 가능하다 . 캐싱을 활용하면 이전에 사용했거나 연산한 데이터를 효율적으로 재사용 가능하다 . : 반복적으로 동일한 결과를 반환하는 경우에 용이 : 매번 다른 결과를 돌려줘야 하는 상황에 캐시 적용시, 오히려 성능이 떨어질 수 있다. → 캐시를 저장하거나, 캐시를 확인하는 작업 때문에 부하 발생 Spring cache 스프링은 캐시 구현 기술에 종속되지 않도록 , 추상화된 서비스를 제공하고 있다 . → 환경이 바뀌거나, 적용 캐시 기술을 변경하여도 애플리케이션 코드에 영..