From bbc02422439c754755c09d057ec39f8cdd12b4b0 Mon Sep 17 00:00:00 2001 From: CYY1007 Date: Sun, 6 Jul 2025 19:47:29 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=99=84=EC=84=B1,=20=EC=8B=9C=ED=81=90=EB=A6=AC?= =?UTF-8?q?=ED=8B=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/user/business/UserMapper.java | 13 ++++ .../api/user/business/UserService.java | 15 ++++ .../implementation/UserCommandAdapter.java | 7 +- .../api/user/presentation/UserApi.java | 20 +++++ .../api/user/presentation/dto/JoinDto.java | 75 +++++++++++++++++++ .../user/presentation/dto/SocialLoginDto.java | 2 + .../exception/base/GlobalErrorCode.java | 2 +- .../global/config/GlobalWebConfig.java | 25 +++++++ .../global/config/SwaggerConfig.java | 48 ++++++++++++ .../rootboxApp/global/entity/User.java | 18 +++++ .../security/config/SecurityConfig.java | 6 +- .../global/security/filter/JwtAuthFilter.java | 22 +++++- .../handler/annotation/AuthMember.java | 7 ++ .../resolver/AuthMemberArgumentResolver.java | 4 + .../security/provider/TokenProvider.java | 2 +- src/main/resources/application.yml | 10 +-- 16 files changed, 263 insertions(+), 13 deletions(-) create mode 100644 src/main/java/rootbox/rootboxApp/api/user/presentation/dto/JoinDto.java create mode 100644 src/main/java/rootbox/rootboxApp/global/config/GlobalWebConfig.java create mode 100644 src/main/java/rootbox/rootboxApp/global/config/SwaggerConfig.java diff --git a/src/main/java/rootbox/rootboxApp/api/user/business/UserMapper.java b/src/main/java/rootbox/rootboxApp/api/user/business/UserMapper.java index 0a73150..91410cf 100644 --- a/src/main/java/rootbox/rootboxApp/api/user/business/UserMapper.java +++ b/src/main/java/rootbox/rootboxApp/api/user/business/UserMapper.java @@ -3,6 +3,7 @@ import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import rootbox.rootboxApp.api.user.presentation.dto.JoinDto; import rootbox.rootboxApp.global.entity.User; import java.util.Optional; @@ -22,4 +23,16 @@ public void init(){ public static Optional toUserSecurity(String id){ return staticUserService.findById(id); } + + public static JoinDto.JoinResponseDto toJoinResponseDto(User user){ + + return JoinDto.JoinResponseDto.builder() + .alarmAgree(user.getGetAlarmYn() == 1) + .birthDay(user.getBirthday()) + .gender(user.getSex().name()) + .nickName(user.getNickname()) + .locationAgree(user.getLocationServiceYn() == 1) + .build(); + + } } diff --git a/src/main/java/rootbox/rootboxApp/api/user/business/UserService.java b/src/main/java/rootbox/rootboxApp/api/user/business/UserService.java index c0f00d8..cfba60b 100644 --- a/src/main/java/rootbox/rootboxApp/api/user/business/UserService.java +++ b/src/main/java/rootbox/rootboxApp/api/user/business/UserService.java @@ -9,6 +9,7 @@ import org.springframework.transaction.annotation.Transactional; import rootbox.rootboxApp.api.user.implementation.UserCommandAdapter; import rootbox.rootboxApp.api.user.implementation.UserQueryAdapter; +import rootbox.rootboxApp.api.user.presentation.dto.JoinDto; import rootbox.rootboxApp.api.user.presentation.dto.SocialLoginDto; import rootbox.rootboxApp.global.entity.RefreshToken; import rootbox.rootboxApp.global.entity.User; @@ -62,6 +63,7 @@ public SocialLoginDto.KakaoSocialLoginResponseDto socialLogin(SocialLoginDto.Kak .isNew(false) .loginType(SocialType.KAKAO.name()) .refreshToken(refreshTokenByUserId.get().getRefreshToken()) + .userSocialId(userBySocialId.get().getSocialLoginUid()) .build(); }else{ // 리프레시 토큰 없음 만약 만료된 리프레시 토큰이면 추후에 만료 로직 탈 것이라 존재 유무만 봄 @@ -71,6 +73,7 @@ public SocialLoginDto.KakaoSocialLoginResponseDto socialLogin(SocialLoginDto.Kak .loginType(SocialType.KAKAO.name()) .refreshToken(userCommandAdapter.saveRefreshToken(tokenProvider.createRefreshToken(), userBySocialId.get().getSocialLoginUid()).getRefreshToken()) + .userSocialId(userBySocialId.get().getSocialLoginUid()) .build(); } }else { @@ -85,6 +88,7 @@ public SocialLoginDto.KakaoSocialLoginResponseDto socialLogin(SocialLoginDto.Kak .accessToken(accessToken) .refreshToken(userCommandAdapter.saveRefreshToken(tokenProvider.createRefreshToken(), user.getSocialLoginUid()).getRefreshToken()) + .userSocialId(user.getSocialLoginUid()) .build(); } } @@ -97,6 +101,17 @@ public String getKakaoToken(String code){ return kakaoOauthService.getKakaoAccessToken(code); } + public Boolean checkNickname(String nickname) { + return userQueryAdapter.findUserByNickname(nickname).isPresent(); + } + + @Transactional + public JoinDto.JoinResponseDto join(JoinDto.JoinRequestDto request, User user) { + User joinedUser = userCommandAdapter.joinUser(request, user); + + return UserMapper.toJoinResponseDto(joinedUser); + } + private String generateUniqueNickname() { String name = ""; do { diff --git a/src/main/java/rootbox/rootboxApp/api/user/implementation/UserCommandAdapter.java b/src/main/java/rootbox/rootboxApp/api/user/implementation/UserCommandAdapter.java index cbb172e..653c365 100644 --- a/src/main/java/rootbox/rootboxApp/api/user/implementation/UserCommandAdapter.java +++ b/src/main/java/rootbox/rootboxApp/api/user/implementation/UserCommandAdapter.java @@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; import rootbox.rootboxApp.api.user.persistence.RefreshTokenRepository; import rootbox.rootboxApp.api.user.persistence.UserRepository; +import rootbox.rootboxApp.api.user.presentation.dto.JoinDto; import rootbox.rootboxApp.global.annotations.Adapter; import rootbox.rootboxApp.global.entity.RefreshToken; import rootbox.rootboxApp.global.entity.User; @@ -18,7 +19,7 @@ public class UserCommandAdapter { private final RefreshTokenRepository refreshTokenRepository; - public User createUser(String username, String socialUid){ + public User createUser(String socialUid, String username){ User newUser = User.builder() .socialLoginUid(socialUid) @@ -38,4 +39,8 @@ public RefreshToken saveRefreshToken(String refreshToken, String userSocialId){ .build() ); } + + public User joinUser(JoinDto.JoinRequestDto requestDto, User user){ + return user.joinUser(requestDto); + } } diff --git a/src/main/java/rootbox/rootboxApp/api/user/presentation/UserApi.java b/src/main/java/rootbox/rootboxApp/api/user/presentation/UserApi.java index e42a768..cbef33a 100644 --- a/src/main/java/rootbox/rootboxApp/api/user/presentation/UserApi.java +++ b/src/main/java/rootbox/rootboxApp/api/user/presentation/UserApi.java @@ -1,5 +1,6 @@ package rootbox.rootboxApp.api.user.presentation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -8,8 +9,11 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import rootbox.rootboxApp.api.user.business.UserService; +import rootbox.rootboxApp.api.user.presentation.dto.JoinDto; import rootbox.rootboxApp.api.user.presentation.dto.SocialLoginDto; import rootbox.rootboxApp.global.common.CommonResponse; +import rootbox.rootboxApp.global.entity.User; +import rootbox.rootboxApp.global.security.handler.annotation.AuthMember; import java.io.IOException; @@ -39,4 +43,20 @@ public void kakaoSocailLoginTest(HttpServletResponse response) throws IOExceptio public CommonResponse getKakaoToken(@RequestParam("code") String code){ return CommonResponse.onSuccess(userService.getKakaoToken(code)); } + + @GetMapping("/auth/nickname") + public CommonResponse checkNickName(@RequestParam(name = "nickname") String nickname) { + return CommonResponse.onSuccess( + JoinDto.JoinNickNameCheckResponseDto.builder().useYn(!userService.checkNickname(nickname)).build()); + } + + @PatchMapping("/") + public CommonResponse joinUser(@RequestBody @Valid JoinDto.JoinRequestDto requestDto, @AuthMember @Parameter(hidden = true) User user) { + return CommonResponse.onSuccess(userService.join(requestDto, user)); + } + + @GetMapping("/") + public String testToken(@AuthMember @Parameter(hidden = true) User user) { + return "인증! 현 로그인 사용자 닉네임 : " + user.getNickname(); + } } diff --git a/src/main/java/rootbox/rootboxApp/api/user/presentation/dto/JoinDto.java b/src/main/java/rootbox/rootboxApp/api/user/presentation/dto/JoinDto.java new file mode 100644 index 0000000..a3eb460 --- /dev/null +++ b/src/main/java/rootbox/rootboxApp/api/user/presentation/dto/JoinDto.java @@ -0,0 +1,75 @@ +package rootbox.rootboxApp.api.user.presentation.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.*; + +import java.time.LocalDate; + +public class JoinDto { + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class JoinNickNameCheckResponseDto{ + + private Boolean useYn; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class JoinRequestDto{ + + @NotNull(message = "위치 기반 동의는 필수 입력 값입니다.") + Boolean locationAgree; + + @NotNull(message = "알람 동의는 필수 입력 값입니다.") + Boolean alarmAgree; + + @NotNull(message = "닉네임은 필수 입력 값입니다.") + @Size(min=2, max=8, message = "닉네임은 2 ~ 8글자 입니다.") + String nickName; + + @NotNull(message = "생일은 필수 입력 값입니다.") + @JsonFormat(pattern = "yyyy-MM-dd") // JSON으로 받을 때 형식 지정 + private LocalDate birthDay; + + @NotNull(message = "성별은 필수 입력 값입니다.") + private String gender; + + } + + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class JoinResponseDto{ + + @NotNull(message = "위치 기반 동의는 필수 입력 값입니다.") + Boolean locationAgree; + + @NotNull(message = "알람 동의는 필수 입력 값입니다.") + Boolean alarmAgree; + + @NotNull(message = "닉네임은 필수 입력 값입니다.") + @Size(min=2, max=8, message = "닉네임은 2 ~ 8글자 입니다.") + String nickName; + + @NotNull(message = "생일은 필수 입력 값입니다.") + @JsonFormat(pattern = "yyyy-MM-dd") // JSON으로 받을 때 형식 지정 + private LocalDate birthDay; + + @NotNull(message = "성별은 필수 입력 값입니다.") + private String gender; + + + } +} diff --git a/src/main/java/rootbox/rootboxApp/api/user/presentation/dto/SocialLoginDto.java b/src/main/java/rootbox/rootboxApp/api/user/presentation/dto/SocialLoginDto.java index 6da4f91..a319282 100644 --- a/src/main/java/rootbox/rootboxApp/api/user/presentation/dto/SocialLoginDto.java +++ b/src/main/java/rootbox/rootboxApp/api/user/presentation/dto/SocialLoginDto.java @@ -22,6 +22,8 @@ public static class KakaoSocialLoginResponseDto { @NotNull String refreshToken; + @NotNull + String userSocialId; } @Getter diff --git a/src/main/java/rootbox/rootboxApp/global/common/exception/base/GlobalErrorCode.java b/src/main/java/rootbox/rootboxApp/global/common/exception/base/GlobalErrorCode.java index fb9fa09..80fabac 100644 --- a/src/main/java/rootbox/rootboxApp/global/common/exception/base/GlobalErrorCode.java +++ b/src/main/java/rootbox/rootboxApp/global/common/exception/base/GlobalErrorCode.java @@ -18,7 +18,7 @@ public enum GlobalErrorCode implements BaseErrorCode{ INVALID_TOKEN(UNAUTHORIZED, "AUTH401_2", "인증 토큰이 유효하지 않습니다."), INVALID_REFRESH_TOKEN(UNAUTHORIZED, "AUTH401_3", "리프레시 토큰이 유효하지 않습니다."), REFRESH_TOKEN_EXPIRED(UNAUTHORIZED, "AUTH401_4", "리프레시 토큰이 만료 되었습니다."), - AUTHENTICATION_REQUIRED(UNAUTHORIZED, "AUTH401_5", "인증 정보가 유효하지 않습니다."), + AUTHENTICATION_REQUIRED(UNAUTHORIZED, "AUTH401_5", "인증 정보가 유효하지 않습니다. access Token을 담으셨는지, bearer를 붙이셨는지 확인 바랍니다."), LOGIN_REQUIRED(UNAUTHORIZED, "AUTH401_6", "로그인이 필요한 서비스입니다."), // AUTH + 403 Forbidden - 인증 거부 diff --git a/src/main/java/rootbox/rootboxApp/global/config/GlobalWebConfig.java b/src/main/java/rootbox/rootboxApp/global/config/GlobalWebConfig.java new file mode 100644 index 0000000..ce92c6f --- /dev/null +++ b/src/main/java/rootbox/rootboxApp/global/config/GlobalWebConfig.java @@ -0,0 +1,25 @@ +package rootbox.rootboxApp.global.config; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import rootbox.rootboxApp.global.security.handler.annotation.resolver.AuthMemberArgumentResolver; + +import java.util.List; + +@Configuration +@RequiredArgsConstructor +public class GlobalWebConfig implements WebMvcConfigurer { + + private final AuthMemberArgumentResolver authMemberArgumentResolver; + + /** + * 컨트롤러 메서드의 특정 파라미터를 지원하는 커스텀한 ArgumentResolver를 추가 + * @param resolverList + */ + @Override + public void addArgumentResolvers(List resolverList) { + resolverList.add(authMemberArgumentResolver); + } +} diff --git a/src/main/java/rootbox/rootboxApp/global/config/SwaggerConfig.java b/src/main/java/rootbox/rootboxApp/global/config/SwaggerConfig.java new file mode 100644 index 0000000..51dbf2b --- /dev/null +++ b/src/main/java/rootbox/rootboxApp/global/config/SwaggerConfig.java @@ -0,0 +1,48 @@ +package rootbox.rootboxApp.global.config; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SwaggerConfig { + @Bean + public OpenAPI SpringCodeBaseAPI() { + Info info = new Info() + .title("RouteBox API") + .description("RouteBox API 명세서") + .version("1.0.0"); + + final String ACCESS_SCHEME_NAME = "Access Token"; + final String REFRESH_SCHEME_NAME = "Refresh Token"; + + Components components = new Components() + .addSecuritySchemes(ACCESS_SCHEME_NAME, + new SecurityScheme() + .type(SecurityScheme.Type.HTTP) + .scheme("bearer") + .bearerFormat("JWT") + .name("Authorization") + .in(SecurityScheme.In.HEADER)) + .addSecuritySchemes(REFRESH_SCHEME_NAME, + new SecurityScheme() + .type(SecurityScheme.Type.HTTP) + .scheme("bearer") + .bearerFormat("JWT") + .name("Refresh") // 예: 헤더 키를 다르게 설정할 수 있음 + .in(SecurityScheme.In.HEADER)); + + return new OpenAPI() + .info(info) + .components(components) + .addServersItem(new Server().url("/")) + // 여기 두 개 모두 SecurityRequirement에 등록 + .addSecurityItem(new SecurityRequirement().addList(ACCESS_SCHEME_NAME)) + .addSecurityItem(new SecurityRequirement().addList(REFRESH_SCHEME_NAME)); + } +} \ No newline at end of file diff --git a/src/main/java/rootbox/rootboxApp/global/entity/User.java b/src/main/java/rootbox/rootboxApp/global/entity/User.java index 56585f7..6803efb 100644 --- a/src/main/java/rootbox/rootboxApp/global/entity/User.java +++ b/src/main/java/rootbox/rootboxApp/global/entity/User.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; +import rootbox.rootboxApp.api.user.presentation.dto.JoinDto; import rootbox.rootboxApp.global.entity.common.BaseEntity; import rootbox.rootboxApp.global.entity.enums.user.SocialType; import rootbox.rootboxApp.global.entity.enums.user.UserRole; @@ -65,4 +66,21 @@ public class User extends BaseEntity { @OneToMany(mappedBy = "user") private List inqueryList = new ArrayList<>(); + + public User joinUser(JoinDto.JoinRequestDto joinRequestDto){ + this.nickname = joinRequestDto.getNickName(); + this.birthday = joinRequestDto.getBirthDay(); + this.locationServiceYn = joinRequestDto.getLocationAgree() ? 1 : 0; + this.getAlarmYn = joinRequestDto.getAlarmAgree() ? 1 : 0; + if (joinRequestDto.getGender().equals("male")){ + this.sex = UserSexType.MALE; + } + else if (joinRequestDto.getGender().equals("female")){ + this.sex = UserSexType.FEMALE; + } + else + this.sex = UserSexType.SECRET; + + return this; + } } diff --git a/src/main/java/rootbox/rootboxApp/global/security/config/SecurityConfig.java b/src/main/java/rootbox/rootboxApp/global/security/config/SecurityConfig.java index 8617539..5214d46 100644 --- a/src/main/java/rootbox/rootboxApp/global/security/config/SecurityConfig.java +++ b/src/main/java/rootbox/rootboxApp/global/security/config/SecurityConfig.java @@ -35,8 +35,8 @@ public class SecurityConfig { private final JwtAuthenticationExceptionHandler jwtAuthenticationExceptionHandler = new JwtAuthenticationExceptionHandler(); - private static final String[] JWT_WHITE_LIST ={ - "/users/login-tmp","/users/reissue" + private static final String[] whiteList = { + "/users/auth/nickname", "/users/auth/kakao/test", "/users/auth/kakao/code", "/users/auth/kakao", "/users/auth/health" }; /** @@ -80,7 +80,7 @@ public SecurityFilterChain JwtFilterChain(HttpSecurity http) throws Exception { .authenticationEntryPoint(jwtAuthenticationEntryPoint) .accessDeniedHandler(jwtAccessDeniedHandler)) .addFilterBefore( - new JwtAuthFilter(tokenProvider, JWT_WHITE_LIST), + new JwtAuthFilter(tokenProvider, whiteList), UsernamePasswordAuthenticationFilter.class) .addFilterBefore(jwtAuthenticationExceptionHandler, JwtAuthFilter.class) .build(); diff --git a/src/main/java/rootbox/rootboxApp/global/security/filter/JwtAuthFilter.java b/src/main/java/rootbox/rootboxApp/global/security/filter/JwtAuthFilter.java index 951de9d..35944b3 100644 --- a/src/main/java/rootbox/rootboxApp/global/security/filter/JwtAuthFilter.java +++ b/src/main/java/rootbox/rootboxApp/global/security/filter/JwtAuthFilter.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.util.Arrays; +import java.util.Enumeration; @Slf4j @RequiredArgsConstructor @@ -32,8 +33,25 @@ public class JwtAuthFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + + log.info("jwt 인증 시작, access token 인증 헤더 정보 : {}, refresh 토큰 인증 헤더 정보 : {}", request.getHeader("Authorization"), request.getHeader("Refresh")); + + if (request.getHeader("Authorization") == null && request.getHeader("Refresh") == null) { + Enumeration headerNames = request.getHeaderNames(); + +// while (headerNames.hasMoreElements()) { +// String headerName = headerNames.nextElement(); +// String headerValue = request.getHeader(headerName); +// log.info("인증 헤더 모두 null이기 때문에 헤더 정보 다 출력 => {} : {}", headerName, headerValue); +// } + } + // HTTP 요청에서 Authorization헤더를 찾아 토큰 반환 - String accessToken = tokenProvider.resolveToken(request, "Access"); + String accessToken = tokenProvider.resolveToken(request, "Authorization"); + + if (accessToken == null) { + accessToken = tokenProvider.resolveToken(request, "Refresh"); + } // 토큰이 있다면 진행 @@ -79,6 +97,6 @@ public void jwtExceptionHandler(HttpServletResponse response, GlobalErrorCode er @Override protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { String path = request.getRequestURI(); - return Arrays.stream(whiteList).anyMatch(path::startsWith); + return Arrays.stream(whiteList).anyMatch(path::contains); } } diff --git a/src/main/java/rootbox/rootboxApp/global/security/handler/annotation/AuthMember.java b/src/main/java/rootbox/rootboxApp/global/security/handler/annotation/AuthMember.java index e5d2b93..7f213e7 100644 --- a/src/main/java/rootbox/rootboxApp/global/security/handler/annotation/AuthMember.java +++ b/src/main/java/rootbox/rootboxApp/global/security/handler/annotation/AuthMember.java @@ -1,4 +1,11 @@ package rootbox.rootboxApp.global.security.handler.annotation; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) // 런타임 중에 어노테이션 정보를 조회하고 처리할 수 있도록 설정 +@Target(ElementType.PARAMETER) // 어노테이션을 파라미터에만 적용 public @interface AuthMember { } diff --git a/src/main/java/rootbox/rootboxApp/global/security/handler/annotation/resolver/AuthMemberArgumentResolver.java b/src/main/java/rootbox/rootboxApp/global/security/handler/annotation/resolver/AuthMemberArgumentResolver.java index 96efc20..476b321 100644 --- a/src/main/java/rootbox/rootboxApp/global/security/handler/annotation/resolver/AuthMemberArgumentResolver.java +++ b/src/main/java/rootbox/rootboxApp/global/security/handler/annotation/resolver/AuthMemberArgumentResolver.java @@ -1,9 +1,11 @@ package rootbox.rootboxApp.global.security.handler.annotation.resolver; +import lombok.RequiredArgsConstructor; import org.springframework.core.MethodParameter; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; @@ -16,6 +18,8 @@ import java.util.Optional; +@Component +@RequiredArgsConstructor public class AuthMemberArgumentResolver implements HandlerMethodArgumentResolver { /** * supportsParameter diff --git a/src/main/java/rootbox/rootboxApp/global/security/provider/TokenProvider.java b/src/main/java/rootbox/rootboxApp/global/security/provider/TokenProvider.java index 818d587..437a2f8 100644 --- a/src/main/java/rootbox/rootboxApp/global/security/provider/TokenProvider.java +++ b/src/main/java/rootbox/rootboxApp/global/security/provider/TokenProvider.java @@ -60,7 +60,7 @@ public void init() { public String resolveToken(HttpServletRequest request, String tokenType) { String headerName; - if ("Access".equals(tokenType)) { + if ("Authorization".equals(tokenType)) { headerName = ACCESS_TOKEN_HEADER; // 올바른 상수 이름이어야 합니다. } else if ("Refresh".equals(tokenType)) { headerName = REFRESH_TOKEN_HEADER; // 올바른 상수 이름이어야 합니다. diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 779b149..30d2a7e 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -54,8 +54,8 @@ spring: properties: hibernate: dialect: org.hibernate.dialect.MySQLDialect - show_sql: true - format_sql: true + show_sql: false + format_sql: false use_sql_comments: true hbm2ddl: auto: update @@ -71,7 +71,7 @@ jwt: key: ${JWT_SECRET} # secret : ${JWT_SECRET} authorities-key: authoritiesKey - access-token-validity-in-seconds: 1296000000 # 15 days + access-token-validity-in-seconds: 30000 # 15 days refresh-token-validity-in-seconds: 5184000000 # 60 days firebase: @@ -142,8 +142,8 @@ jwt: key: secretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecretsecret # secret : ${JWT_SECRET} authorities-key: authoritiesKey - access-token-validity-in-seconds: 120000 # 2 min - refresh-token-validity-in-seconds: 300000 # 5 min + access-token-validity-in-seconds: 300000 # 15 days + refresh-token-validity-in-seconds: 5184000000 # 60 days oauth: kakao: baseUrl: ${KAKAO_BASE_URL}