From 7b81cbb6c99a005ba6a6645a46a482e4a07ea795 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Mon, 3 Jul 2023 16:53:26 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20Spring=20Security=20Filter=20?= =?UTF-8?q?=EB=8B=A8=EC=97=90=EC=84=9C=20=EC=97=90=EB=9F=AC=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EB=8A=94=20=ED=95=84=ED=84=B0=20=EB=B0=8F=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sophy/sophy/config/JwtSecurityConfig.java | 3 ++ .../sophy/sophy/jwt/JwtExceptionFilter.java | 39 +++++++++++++++++++ .../java/org/sophy/sophy/jwt/JwtFilter.java | 16 +++++--- 3 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 src/main/java/org/sophy/sophy/jwt/JwtExceptionFilter.java diff --git a/src/main/java/org/sophy/sophy/config/JwtSecurityConfig.java b/src/main/java/org/sophy/sophy/config/JwtSecurityConfig.java index 63877bc..00471f6 100644 --- a/src/main/java/org/sophy/sophy/config/JwtSecurityConfig.java +++ b/src/main/java/org/sophy/sophy/config/JwtSecurityConfig.java @@ -1,6 +1,7 @@ package org.sophy.sophy.config; import lombok.RequiredArgsConstructor; +import org.sophy.sophy.jwt.JwtExceptionFilter; import org.sophy.sophy.jwt.JwtFilter; import org.sophy.sophy.jwt.TokenProvider; import org.springframework.security.config.annotation.SecurityConfigurerAdapter; @@ -12,6 +13,7 @@ @RequiredArgsConstructor public class JwtSecurityConfig extends SecurityConfigurerAdapter { private final TokenProvider tokenProvider; + private final JwtExceptionFilter jwtExceptionFilter; //TokenProvider를 주입받아서 JwtFillter를 통해 Security 로직에 필터를 등록 //HttpSecurity의 userpassword인증필터에 filter 추가 @@ -19,6 +21,7 @@ public class JwtSecurityConfig extends SecurityConfigurerAdapter Date: Mon, 3 Jul 2023 16:56:36 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20Access=20Token,=20Refresh=20Token?= =?UTF-8?q?=20=EA=B0=81=EA=B0=81=20=EB=A7=8C=EB=A3=8C=EB=90=A0=20=EC=8B=9C?= =?UTF-8?q?=EC=97=90=20=EC=97=90=EB=9F=AC=20=EB=B0=98=ED=99=98=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../advice/ControllerExceptionAdvice.java | 8 +++++++- .../org/sophy/sophy/config/SecurityConfig.java | 5 ++++- .../org/sophy/sophy/exception/ErrorStatus.java | 8 +++++++- .../sophy/sophy/exception/SuccessStatus.java | 2 ++ .../exception/model/ExistEmailException.java | 10 ++++++++++ .../model/ExpiredRefreshTokenException.java | 10 ++++++++++ .../org/sophy/sophy/jwt/TokenProvider.java | 12 +++++++----- .../org/sophy/sophy/service/AuthService.java | 18 +++++++++++++----- 8 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 src/main/java/org/sophy/sophy/exception/model/ExistEmailException.java create mode 100644 src/main/java/org/sophy/sophy/exception/model/ExpiredRefreshTokenException.java diff --git a/src/main/java/org/sophy/sophy/common/advice/ControllerExceptionAdvice.java b/src/main/java/org/sophy/sophy/common/advice/ControllerExceptionAdvice.java index 2a09062..fc701a8 100644 --- a/src/main/java/org/sophy/sophy/common/advice/ControllerExceptionAdvice.java +++ b/src/main/java/org/sophy/sophy/common/advice/ControllerExceptionAdvice.java @@ -1,5 +1,6 @@ package org.sophy.sophy.common.advice; +import io.jsonwebtoken.ExpiredJwtException; import org.sophy.sophy.common.dto.ApiResponseDto; import org.sophy.sophy.exception.ErrorStatus; import org.springframework.http.HttpStatus; @@ -8,7 +9,6 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.sophy.sophy.exception.model.SophyException; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice @@ -30,6 +30,12 @@ protected ApiResponseDto handleMethodArgumentNotValidException(final MethodArgum // return ApiResponseDto.error(ErrorStatus.INTERNAL_SERVER_ERROR); // } + @ResponseStatus(HttpStatus.UNAUTHORIZED) + @ExceptionHandler(ExpiredJwtException.class) + protected ApiResponseDto handleExpiredRefreshTokenException(final ExpiredJwtException e) { + return ApiResponseDto.error(ErrorStatus.REFRESH_TOKEN_TIME_EXPIRED_EXCEPTION); + } + /** * Sopt custom error */ diff --git a/src/main/java/org/sophy/sophy/config/SecurityConfig.java b/src/main/java/org/sophy/sophy/config/SecurityConfig.java index 734009d..3a01c0a 100644 --- a/src/main/java/org/sophy/sophy/config/SecurityConfig.java +++ b/src/main/java/org/sophy/sophy/config/SecurityConfig.java @@ -3,6 +3,7 @@ import lombok.RequiredArgsConstructor; import org.sophy.sophy.jwt.JwtAccessDeniedHandler; import org.sophy.sophy.jwt.JwtAuthenticationEntryPoint; +import org.sophy.sophy.jwt.JwtExceptionFilter; import org.sophy.sophy.jwt.TokenProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -19,6 +20,8 @@ public class SecurityConfig { private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private final JwtAccessDeniedHandler jwtAccessDeniedHandler; + private final JwtExceptionFilter jwtExceptionFilter; + @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); @@ -55,7 +58,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { //JwtFilter 를 addFilterBefore 로 등록했던 JwtSecurityConfig 클래스를 적용 .and() - .apply(new JwtSecurityConfig(tokenProvider)); + .apply(new JwtSecurityConfig(tokenProvider, jwtExceptionFilter)); return http.build(); } diff --git a/src/main/java/org/sophy/sophy/exception/ErrorStatus.java b/src/main/java/org/sophy/sophy/exception/ErrorStatus.java index caf78de..c9930a7 100644 --- a/src/main/java/org/sophy/sophy/exception/ErrorStatus.java +++ b/src/main/java/org/sophy/sophy/exception/ErrorStatus.java @@ -19,7 +19,8 @@ public enum ErrorStatus { /** * 401 UNAUTHORIZED */ - TOKEN_TIME_EXPIRED_EXCEPTION(HttpStatus.UNAUTHORIZED, "만료된 토큰입니다."), + INVALID_ACCESS_TOKEN_EXCEPTION(HttpStatus.UNAUTHORIZED, "유효하지 않은 액세스 토큰입니다."), + REFRESH_TOKEN_TIME_EXPIRED_EXCEPTION(HttpStatus.UNAUTHORIZED, "만료된 리프레시 토큰입니다."), /** * 404 NOT FOUND */ @@ -27,6 +28,11 @@ public enum ErrorStatus { NOT_FOUND_SAVE_IMAGE_EXCEPTION(HttpStatus.NOT_FOUND, "이미지 저장에 실패했습니다"), NOT_FOUND_IMAGE_EXCEPTION(HttpStatus.NOT_FOUND, "이미지 이름을 찾을 수 없습니다"), + /** + * 409 CONFLICT + */ + ALREADY_EXIST_USER_EXCEPTION(HttpStatus.CONFLICT, "이미 존재하는 유저입니다"), + /** * 500 INTERNAL SERVER ERROR */ diff --git a/src/main/java/org/sophy/sophy/exception/SuccessStatus.java b/src/main/java/org/sophy/sophy/exception/SuccessStatus.java index 6b82153..8a5b50d 100644 --- a/src/main/java/org/sophy/sophy/exception/SuccessStatus.java +++ b/src/main/java/org/sophy/sophy/exception/SuccessStatus.java @@ -13,6 +13,8 @@ public enum SuccessStatus { */ LOGIN_SUCCESS(HttpStatus.OK, "로그인에 성공했습니다."), REISSUE_SUCCESS(HttpStatus.OK, "토큰 재발행에 성공했습니다."), + CHECK_DUPL_EMAIL_SUCCESS(HttpStatus.OK, "사용 가능한 이메일 주소입니다."), + TEST_SUCCESS(HttpStatus.OK, "Test :: OK"), /* * 201 created */ diff --git a/src/main/java/org/sophy/sophy/exception/model/ExistEmailException.java b/src/main/java/org/sophy/sophy/exception/model/ExistEmailException.java new file mode 100644 index 0000000..7e60df0 --- /dev/null +++ b/src/main/java/org/sophy/sophy/exception/model/ExistEmailException.java @@ -0,0 +1,10 @@ +package org.sophy.sophy.exception.model; + +import org.sophy.sophy.exception.ErrorStatus; + +public class ExistEmailException extends SophyException { + + public ExistEmailException(ErrorStatus errorStatus, String message) { + super(errorStatus, message); + } +} diff --git a/src/main/java/org/sophy/sophy/exception/model/ExpiredRefreshTokenException.java b/src/main/java/org/sophy/sophy/exception/model/ExpiredRefreshTokenException.java new file mode 100644 index 0000000..b9bf2c3 --- /dev/null +++ b/src/main/java/org/sophy/sophy/exception/model/ExpiredRefreshTokenException.java @@ -0,0 +1,10 @@ +package org.sophy.sophy.exception.model; + +import org.sophy.sophy.exception.ErrorStatus; + +public class ExpiredRefreshTokenException extends SophyException { + + public ExpiredRefreshTokenException(ErrorStatus errorStatus, String message) { + super(errorStatus, message); + } +} diff --git a/src/main/java/org/sophy/sophy/jwt/TokenProvider.java b/src/main/java/org/sophy/sophy/jwt/TokenProvider.java index 1036fe3..f67ff4d 100644 --- a/src/main/java/org/sophy/sophy/jwt/TokenProvider.java +++ b/src/main/java/org/sophy/sophy/jwt/TokenProvider.java @@ -26,8 +26,10 @@ public class TokenProvider { private static final String AUTHORITIES_KEY = "auth"; private static final String BEARER_TYPE = "Bearer"; - private static final long ACCESS_TOKEN_EXPIRE_TIME = 1000 * 60 * 30; - private static final long REFRESH_TOKEN_EXPIRE_TIME = 1000 * 60 * 60 * 24 * 7; + private static final long ACCESS_TOKEN_EXPIRE_TIME = 1000 * 10; +// private static final long ACCESS_TOKEN_EXPIRE_TIME = 1000 * 60 * 30; + private static final long REFRESH_TOKEN_EXPIRE_TIME = 1000 * 15; +// private static final long REFRESH_TOKEN_EXPIRE_TIME = 1000 * 60 * 60 * 24 * 7; private final Key key; @@ -115,13 +117,13 @@ public boolean validateToken(String token) { return true; } catch (io.jsonwebtoken.security.SecurityException | MalformedJwtException e) { log.info("잘못된 JWT 서명입니다."); - } catch (ExpiredJwtException e) { - log.info("만료된 JWT 토큰입니다."); + throw new JwtException("잘못된 JWT 서명입니다."); } catch (UnsupportedJwtException e) { log.info("지원되지 않는 JWT 토큰입니다."); + throw new JwtException("지원되지 않는 JWT 토큰입니다."); } catch (IllegalStateException e) { log.info("JWT 토큰이 잘못되었습니다."); + throw new JwtException("JWT 토큰이 잘못되었습니다."); } - return false; } } diff --git a/src/main/java/org/sophy/sophy/service/AuthService.java b/src/main/java/org/sophy/sophy/service/AuthService.java index 65109cb..76daeee 100644 --- a/src/main/java/org/sophy/sophy/service/AuthService.java +++ b/src/main/java/org/sophy/sophy/service/AuthService.java @@ -7,6 +7,8 @@ import org.sophy.sophy.controller.dto.response.MemberResponseDto; import org.sophy.sophy.controller.dto.response.TokenDto; import org.sophy.sophy.domain.Member; +import org.sophy.sophy.exception.ErrorStatus; +import org.sophy.sophy.exception.model.ExistEmailException; import org.sophy.sophy.infrastructure.MemberRepository; import org.sophy.sophy.jwt.TokenProvider; import org.springframework.data.redis.core.RedisTemplate; @@ -33,13 +35,21 @@ public class AuthService { @Transactional public MemberResponseDto signup(MemberRequestDto memberRequestDto) { if (memberRepository.existsByEmail(memberRequestDto.getEmail())) { - throw new RuntimeException("이미 가입되어 있는 유저입니다."); + throw new ExistEmailException(ErrorStatus.ALREADY_EXIST_USER_EXCEPTION, ErrorStatus.ALREADY_EXIST_USER_EXCEPTION.getMessage()); } Member member = memberRequestDto.toMember(passwordEncoder); return MemberResponseDto.of(memberRepository.save(member)); } + @Transactional + public String duplCheck(String email) { + if (memberRepository.findByEmail(email).isPresent()) { + throw new ExistEmailException(ErrorStatus.ALREADY_EXIST_USER_EXCEPTION, ErrorStatus.ALREADY_EXIST_USER_EXCEPTION.getMessage()); + } + return "사용 가능한 이메일입니다."; + } + @Transactional public TokenDto login(MemberLoginRequestDto memberLoginRequestDto) { // 1. Login ID/PW 를 기반으로 AuthenticationToken 생성 @@ -64,11 +74,9 @@ public TokenDto login(MemberLoginRequestDto memberLoginRequestDto) { } @Transactional - public TokenDto reissue(TokenRequestDto tokenRequestDto) { + public TokenDto reissue(TokenRequestDto tokenRequestDto){ // 1. Refresh Token 검증 - if (!tokenProvider.validateToken(tokenRequestDto.getRefreshToken())) { - throw new RuntimeException("Refresh Token 이 유효하지 않습니다."); - } + tokenProvider.validateToken(tokenRequestDto.getRefreshToken()); // 2. Access Token 에서 Member ID 가져오기 Authentication authentication = tokenProvider.getAuthentication(tokenRequestDto.getAccessToken()); From 95507fbb27d305257d05553fb18b1e0c155668fb Mon Sep 17 00:00:00 2001 From: dong2ast Date: Mon, 3 Jul 2023 16:57:26 +0900 Subject: [PATCH 3/6] =?UTF-8?q?chore:=20=ED=86=A0=ED=81=B0=20=EB=A7=8C?= =?UTF-8?q?=EB=A3=8C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=B4=20=EB=A7=8C=EB=A3=8C=EC=8B=9C=EA=B0=84=20=EC=A7=A7?= =?UTF-8?q?=EA=B2=8C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sophy/sophy/controller/TestController.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/org/sophy/sophy/controller/TestController.java diff --git a/src/main/java/org/sophy/sophy/controller/TestController.java b/src/main/java/org/sophy/sophy/controller/TestController.java new file mode 100644 index 0000000..853906e --- /dev/null +++ b/src/main/java/org/sophy/sophy/controller/TestController.java @@ -0,0 +1,15 @@ +package org.sophy.sophy.controller; + +import org.sophy.sophy.common.dto.ApiResponseDto; +import org.sophy.sophy.exception.SuccessStatus; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TestController { + + @GetMapping("/test") + public ApiResponseDto test() { + return ApiResponseDto.success(SuccessStatus.TEST_SUCCESS, SuccessStatus.TEST_SUCCESS.getMessage()); + } +} From 3a49398517dbab8ed1bfd0c0c173c210645a0626 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Mon, 3 Jul 2023 17:30:42 +0900 Subject: [PATCH 4/6] =?UTF-8?q?feat:=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=B2=B4=ED=81=AC=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sophy/sophy/controller/AuthController.java | 13 ++++++++++--- .../controller/dto/request/DuplCheckDto.java | 17 +++++++++++++++++ .../sophy/infrastructure/MemberRepository.java | 2 ++ .../java/org/sophy/sophy/jwt/TokenProvider.java | 2 +- .../org/sophy/sophy/service/AuthService.java | 6 ++++-- 5 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/sophy/sophy/controller/dto/request/DuplCheckDto.java diff --git a/src/main/java/org/sophy/sophy/controller/AuthController.java b/src/main/java/org/sophy/sophy/controller/AuthController.java index e193bf0..a879cd4 100644 --- a/src/main/java/org/sophy/sophy/controller/AuthController.java +++ b/src/main/java/org/sophy/sophy/controller/AuthController.java @@ -2,6 +2,7 @@ import lombok.RequiredArgsConstructor; import org.sophy.sophy.common.dto.ApiResponseDto; +import org.sophy.sophy.controller.dto.request.DuplCheckDto; import org.sophy.sophy.controller.dto.request.MemberLoginRequestDto; import org.sophy.sophy.controller.dto.request.MemberRequestDto; import org.sophy.sophy.controller.dto.request.TokenRequestDto; @@ -9,7 +10,7 @@ import org.sophy.sophy.controller.dto.response.TokenDto; import org.sophy.sophy.exception.SuccessStatus; import org.sophy.sophy.service.AuthService; -import org.springframework.http.ResponseEntity; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; @RestController @@ -19,8 +20,9 @@ public class AuthController { private final AuthService authService; @PostMapping("/signup") - public ResponseEntity signup(@RequestBody MemberRequestDto memberRequestDto) { - return ResponseEntity.ok(authService.signup(memberRequestDto)); + @ResponseStatus(HttpStatus.CREATED) + public ApiResponseDto signup(@RequestBody MemberRequestDto memberRequestDto) { + return ApiResponseDto.success(SuccessStatus.SIGNUP_SUCCESS, authService.signup(memberRequestDto)); } @PostMapping("/login") @@ -32,4 +34,9 @@ public ApiResponseDto login(@RequestBody MemberLoginRequestDto memberL public ApiResponseDto reissue(@RequestBody TokenRequestDto tokenRequestDto) { return ApiResponseDto.success(SuccessStatus.REISSUE_SUCCESS, authService.reissue(tokenRequestDto)); } + + @GetMapping("/dupl-check") + public ApiResponseDto duplCheck(@RequestBody DuplCheckDto email) { + return ApiResponseDto.success(SuccessStatus.CHECK_DUPL_EMAIL_SUCCESS, authService.duplCheck(email)); + } } diff --git a/src/main/java/org/sophy/sophy/controller/dto/request/DuplCheckDto.java b/src/main/java/org/sophy/sophy/controller/dto/request/DuplCheckDto.java new file mode 100644 index 0000000..4fb1902 --- /dev/null +++ b/src/main/java/org/sophy/sophy/controller/dto/request/DuplCheckDto.java @@ -0,0 +1,17 @@ +package org.sophy.sophy.controller.dto.request; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotNull; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class DuplCheckDto { + @Email(message = "이메일 형식에 맞지 않습니다.") + @NotNull + String email; +} diff --git a/src/main/java/org/sophy/sophy/infrastructure/MemberRepository.java b/src/main/java/org/sophy/sophy/infrastructure/MemberRepository.java index e530e95..1d25594 100644 --- a/src/main/java/org/sophy/sophy/infrastructure/MemberRepository.java +++ b/src/main/java/org/sophy/sophy/infrastructure/MemberRepository.java @@ -3,10 +3,12 @@ import org.sophy.sophy.domain.Member; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @Repository +@Transactional public interface MemberRepository extends JpaRepository { Optional findByEmail(String email); boolean existsByEmail(String email); diff --git a/src/main/java/org/sophy/sophy/jwt/TokenProvider.java b/src/main/java/org/sophy/sophy/jwt/TokenProvider.java index f67ff4d..14a2631 100644 --- a/src/main/java/org/sophy/sophy/jwt/TokenProvider.java +++ b/src/main/java/org/sophy/sophy/jwt/TokenProvider.java @@ -28,7 +28,7 @@ public class TokenProvider { private static final String BEARER_TYPE = "Bearer"; private static final long ACCESS_TOKEN_EXPIRE_TIME = 1000 * 10; // private static final long ACCESS_TOKEN_EXPIRE_TIME = 1000 * 60 * 30; - private static final long REFRESH_TOKEN_EXPIRE_TIME = 1000 * 15; + private static final long REFRESH_TOKEN_EXPIRE_TIME = 1000 * 30; // private static final long REFRESH_TOKEN_EXPIRE_TIME = 1000 * 60 * 60 * 24 * 7; private final Key key; diff --git a/src/main/java/org/sophy/sophy/service/AuthService.java b/src/main/java/org/sophy/sophy/service/AuthService.java index 76daeee..7b8131e 100644 --- a/src/main/java/org/sophy/sophy/service/AuthService.java +++ b/src/main/java/org/sophy/sophy/service/AuthService.java @@ -1,6 +1,7 @@ package org.sophy.sophy.service; import lombok.RequiredArgsConstructor; +import org.sophy.sophy.controller.dto.request.DuplCheckDto; import org.sophy.sophy.controller.dto.request.MemberLoginRequestDto; import org.sophy.sophy.controller.dto.request.MemberRequestDto; import org.sophy.sophy.controller.dto.request.TokenRequestDto; @@ -43,8 +44,9 @@ public MemberResponseDto signup(MemberRequestDto memberRequestDto) { } @Transactional - public String duplCheck(String email) { - if (memberRepository.findByEmail(email).isPresent()) { + public String duplCheck(DuplCheckDto email) { + + if (memberRepository.existsByEmail(email.getEmail())) { throw new ExistEmailException(ErrorStatus.ALREADY_EXIST_USER_EXCEPTION, ErrorStatus.ALREADY_EXIST_USER_EXCEPTION.getMessage()); } return "사용 가능한 이메일입니다."; From f13a2b8e5c66e51b4ec8dea7700473a0246dd65a Mon Sep 17 00:00:00 2001 From: dong2ast Date: Mon, 3 Jul 2023 17:32:55 +0900 Subject: [PATCH 5/6] =?UTF-8?q?fix:=20=EC=98=88=EC=99=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/sophy/sophy/jwt/TokenProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/sophy/sophy/jwt/TokenProvider.java b/src/main/java/org/sophy/sophy/jwt/TokenProvider.java index 14a2631..598faa8 100644 --- a/src/main/java/org/sophy/sophy/jwt/TokenProvider.java +++ b/src/main/java/org/sophy/sophy/jwt/TokenProvider.java @@ -80,7 +80,7 @@ public Authentication getAuthentication(String accessToken) { Claims claims = parseClaims(accessToken); if (claims.get(AUTHORITIES_KEY) == null) { - throw new RuntimeException("권한 정보가 없는 토큰입니다."); + throw new JwtException("권한 정보가 없는 토큰입니다."); } //클레임에서 권한 정보 가져오기 From 0ca215787113902dbe1c8d634758695fc30e6779 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Mon, 3 Jul 2023 22:42:54 +0900 Subject: [PATCH 6/6] =?UTF-8?q?add:=20CD=20=EC=9C=84=ED=95=B4=20SecurityCo?= =?UTF-8?q?nfig=20=EA=B6=8C=ED=95=9C=20=ED=97=88=EC=9A=A9=20path=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/org/sophy/sophy/config/SecurityConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/sophy/sophy/config/SecurityConfig.java b/src/main/java/org/sophy/sophy/config/SecurityConfig.java index 3a01c0a..7c83c88 100644 --- a/src/main/java/org/sophy/sophy/config/SecurityConfig.java +++ b/src/main/java/org/sophy/sophy/config/SecurityConfig.java @@ -54,6 +54,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .antMatchers("/auth/**").permitAll() .antMatchers("/profile/**").permitAll() .antMatchers("/actuator/**").permitAll() + .antMatchers("/health/**").permitAll() .anyRequest().authenticated() //나머지 API는 전부 인증 필요 //JwtFilter 를 addFilterBefore 로 등록했던 JwtSecurityConfig 클래스를 적용