diff --git a/build.gradle b/build.gradle index 724e928..6e388be 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,14 @@ plugins { id 'java' - id 'org.springframework.boot' version '2.7.14' - id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'org.springframework.boot' version '3.2.4' + id 'io.spring.dependency-management' version '1.1.4' } group = 'com' version = '0.0.1-SNAPSHOT' java { - sourceCompatibility = '11' + sourceCompatibility = '17' } configurations { diff --git a/src/main/java/com/Nunbody/domain/Mail/domain/MailBody.java b/src/main/java/com/Nunbody/domain/Mail/domain/MailBody.java index 2296f52..821fb8c 100644 --- a/src/main/java/com/Nunbody/domain/Mail/domain/MailBody.java +++ b/src/main/java/com/Nunbody/domain/Mail/domain/MailBody.java @@ -7,7 +7,7 @@ import org.springframework.data.mongodb.core.mapping.Field; import org.springframework.data.mongodb.core.mapping.FieldType; -import javax.persistence.Id; +import jakarta.persistence.*; @Data diff --git a/src/main/java/com/Nunbody/domain/Mail/domain/MailHeader.java b/src/main/java/com/Nunbody/domain/Mail/domain/MailHeader.java index cefbdf4..5738ed9 100644 --- a/src/main/java/com/Nunbody/domain/Mail/domain/MailHeader.java +++ b/src/main/java/com/Nunbody/domain/Mail/domain/MailHeader.java @@ -2,9 +2,9 @@ import com.Nunbody.domain.member.domain.Member; import com.mongodb.lang.Nullable; +import jakarta.persistence.*; import lombok.*; -import javax.persistence.*; @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor diff --git a/src/main/java/com/Nunbody/domain/Mail/domain/MailList.java b/src/main/java/com/Nunbody/domain/Mail/domain/MailList.java index 99ddc55..9722d39 100644 --- a/src/main/java/com/Nunbody/domain/Mail/domain/MailList.java +++ b/src/main/java/com/Nunbody/domain/Mail/domain/MailList.java @@ -2,9 +2,7 @@ import lombok.Builder; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import jakarta.persistence.*; @Builder diff --git a/src/main/java/com/Nunbody/domain/Mail/domain/MailMember.java b/src/main/java/com/Nunbody/domain/Mail/domain/MailMember.java index d846805..9e6f582 100644 --- a/src/main/java/com/Nunbody/domain/Mail/domain/MailMember.java +++ b/src/main/java/com/Nunbody/domain/Mail/domain/MailMember.java @@ -3,7 +3,7 @@ import com.Nunbody.domain.member.domain.Member; import lombok.*; -import javax.persistence.*; +import jakarta.persistence.*; @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor diff --git a/src/main/java/com/Nunbody/domain/member/domain/Keyword.java b/src/main/java/com/Nunbody/domain/member/domain/Keyword.java index f6d5c18..bac9f9c 100644 --- a/src/main/java/com/Nunbody/domain/member/domain/Keyword.java +++ b/src/main/java/com/Nunbody/domain/member/domain/Keyword.java @@ -5,7 +5,7 @@ import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; -import javax.persistence.Id; +import jakarta.persistence.*; import java.util.List; diff --git a/src/main/java/com/Nunbody/domain/member/domain/Member.java b/src/main/java/com/Nunbody/domain/member/domain/Member.java index ea69e01..8f8b6d1 100644 --- a/src/main/java/com/Nunbody/domain/member/domain/Member.java +++ b/src/main/java/com/Nunbody/domain/member/domain/Member.java @@ -5,7 +5,7 @@ import com.Nunbody.global.common.BaseTimeEntity; import lombok.*; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/Nunbody/global/common/BaseTimeEntity.java b/src/main/java/com/Nunbody/global/common/BaseTimeEntity.java index 00d564f..bf73033 100644 --- a/src/main/java/com/Nunbody/global/common/BaseTimeEntity.java +++ b/src/main/java/com/Nunbody/global/common/BaseTimeEntity.java @@ -5,9 +5,7 @@ import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.Column; -import javax.persistence.EntityListeners; -import javax.persistence.MappedSuperclass; +import jakarta.persistence.*; import java.time.LocalDateTime; @Getter diff --git a/src/main/java/com/Nunbody/global/config/SpringSecurityConfig.java b/src/main/java/com/Nunbody/global/config/SpringSecurityConfig.java index 1b7882a..d5366f8 100644 --- a/src/main/java/com/Nunbody/global/config/SpringSecurityConfig.java +++ b/src/main/java/com/Nunbody/global/config/SpringSecurityConfig.java @@ -28,7 +28,7 @@ public class SpringSecurityConfig { @Bean public WebSecurityCustomizer webSecurityCustomizer() { - return web -> web.ignoring().antMatchers(whiteList); + return web -> web.ignoring().requestMatchers(whiteList); } @Bean diff --git a/src/main/java/com/Nunbody/global/config/auth/ExceptionHandlerFilter.java b/src/main/java/com/Nunbody/global/config/auth/ExceptionHandlerFilter.java index 4a474ff..08fe643 100644 --- a/src/main/java/com/Nunbody/global/config/auth/ExceptionHandlerFilter.java +++ b/src/main/java/com/Nunbody/global/config/auth/ExceptionHandlerFilter.java @@ -1,25 +1,20 @@ package com.Nunbody.global.config.auth; import com.Nunbody.global.error.ErrorCode; -import com.Nunbody.global.error.ErrorResponse; import com.Nunbody.global.error.dto.ErrorBaseResponse; import com.Nunbody.global.error.exception.InvalidValueException; import com.Nunbody.global.error.exception.UnauthorizedException; import com.fasterxml.jackson.databind.ObjectMapper; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.filter.OncePerRequestFilter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import static com.Nunbody.global.error.ErrorCode.INTERNAL_SERVER_ERROR; - @Slf4j public class ExceptionHandlerFilter extends OncePerRequestFilter { private final ObjectMapper objectMapper = new ObjectMapper(); @@ -30,83 +25,28 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse filterChain.doFilter(request, response); } catch (UnauthorizedException e) { handleUnauthorizedException(response, e); - } catch (Exception exception) { - String errorMessage = exception.getMessage(); - if (errorMessage.contains("존재하지 않는 이메일 정보입니다")) { - // Handle username or password error - // You can log the error message or perform any other necessary actions - setErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR, - ErrorCode.INVALID_EMAIL_ERROR, - request, response, "ID 또는 비밀번호가 올바르지 않습니다.", "DEFAULT-ERROR-01" - ); - } else if (errorMessage.contains("IMAP 설정을 해주세요")) { - // Handle IMAP/SMTP settings error - // You can log the error message or perform any other necessary actions - setErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR, - ErrorCode.IMAP_ERROR, - request, response, "IMAP/SMTP 설정을 확인하세요.", "DEFAULT-ERROR-01" - ); - } else if (errorMessage.contains("이미 존재하는 아이디입니다")) { - setErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR, - ErrorCode.ACCOUNT_EXISTS_ERROR, - request, response, "아이디 중복.", "DEFAULT-ERROR-01" - ); - }else if (errorMessage.contains("이미 존재하는 닉네임입니다")) { - setErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR, - ErrorCode.NAME_EXISTS_ERROR, - request, response, "닉네임 중복.", "DEFAULT-ERROR-01" - ); - }else if(errorMessage.contains("잘못")){setErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR, - ErrorCode.NAME_ERROR, - request, response, "잘못.", "DEFAULT-ERROR-01" - );} - else{ - handleException(response);} + } catch (Exception ee) { + handleException(response); } } private void handleUnauthorizedException(HttpServletResponse response, Exception e) throws IOException { response.setContentType(MediaType.APPLICATION_JSON_VALUE); response.setCharacterEncoding("utf-8"); - - if (UnauthorizedException.class.isAssignableFrom(e.getClass())) { - UnauthorizedException ue = (UnauthorizedException) e; + if (e instanceof UnauthorizedException ue) { response.setStatus(ue.getErrorCode().getHttpStatus().value()); response.getWriter().write(objectMapper.writeValueAsString(ErrorBaseResponse.of(ue.getErrorCode()))); - } else if (InvalidValueException.class.isAssignableFrom(e.getClass())) { - InvalidValueException ie = (InvalidValueException) e; + } else if (e instanceof InvalidValueException ie) { response.setStatus(ie.getErrorCode().getHttpStatus().value()); response.getWriter().write(objectMapper.writeValueAsString(ErrorBaseResponse.of(ie.getErrorCode()))); } } - private void setErrorResponse(HttpStatus status, - ErrorCode code, - HttpServletRequest request, - HttpServletResponse response, - String exceptionMessage, - String errorCode) { - response.setStatus(status.value()); - response.setContentType("application/json"); - ErrorResponse errorResponse = new ErrorResponse(code, exceptionMessage); - try { - log.error("에러코드 "+errorCode+": "+exceptionMessage+", 요청 url: "+request.getRequestURI()); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(objectMapper.writeValueAsString(errorResponse)); - } catch (IOException e) { - e.printStackTrace(); - } - } private void handleException(HttpServletResponse response) throws IOException { response.setContentType(MediaType.APPLICATION_JSON_VALUE); response.setCharacterEncoding("utf-8"); - response.setStatus(INTERNAL_SERVER_ERROR.getHttpStatus().value()); - response.getWriter().write(objectMapper.writeValueAsString(ErrorBaseResponse.of(INTERNAL_SERVER_ERROR))); + response.setStatus(ErrorCode.INTERNAL_SERVER_ERROR.getHttpStatus().value()); + response.getWriter().write(objectMapper.writeValueAsString(ErrorBaseResponse.of(ErrorCode.INTERNAL_SERVER_ERROR))); } } diff --git a/src/main/java/com/Nunbody/global/config/auth/JwtAuthenticationEntryPoint.java b/src/main/java/com/Nunbody/global/config/auth/JwtAuthenticationEntryPoint.java index 5e25e8e..fdf30e4 100644 --- a/src/main/java/com/Nunbody/global/config/auth/JwtAuthenticationEntryPoint.java +++ b/src/main/java/com/Nunbody/global/config/auth/JwtAuthenticationEntryPoint.java @@ -4,13 +4,13 @@ import com.Nunbody.global.error.dto.ErrorBaseResponse; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.MediaType; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.stereotype.Component; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Component @@ -18,7 +18,7 @@ public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { private final ObjectMapper objectMapper = new ObjectMapper(); @Override - public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException { + public void commence(HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, AuthenticationException authException) throws IOException { handleException(response); } diff --git a/src/main/java/com/Nunbody/jwt/ExceptionHandleFilter.java b/src/main/java/com/Nunbody/jwt/ExceptionHandleFilter.java deleted file mode 100644 index d1e42c2..0000000 --- a/src/main/java/com/Nunbody/jwt/ExceptionHandleFilter.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.Nunbody.jwt; - -import com.Nunbody.global.error.ErrorCode; -import com.Nunbody.global.error.ErrorResponse; -import com.Nunbody.jwt.exception.EmptyTokenException; -import com.Nunbody.jwt.exception.InvalidTokenException; -import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Component; -import org.springframework.web.filter.OncePerRequestFilter; - -import javax.mail.AuthenticationFailedException; -import javax.servlet.FilterChain; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -@Slf4j -@RequiredArgsConstructor -@Component -public class ExceptionHandleFilter extends OncePerRequestFilter { - private final ObjectMapper objectMapper; - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) { - try { - filterChain.doFilter(request, response); - } catch (InvalidTokenException exception) { - setErrorResponse( - HttpStatus.BAD_REQUEST, - ErrorCode.INVALID_ACCESS_TOKEN_ERROR, - request, response, exception.getMessage(), "TOKEN-ERROR-01" - ); - - } catch (EmptyTokenException exception) { - setErrorResponse( - HttpStatus.BAD_REQUEST, - ErrorCode.INVALID_ACCESS_TOKEN_ERROR, - request, response, exception.getMessage(), "TOKEN-ERROR-02" - ); - } catch (Exception exception) { -// if (exception instanceof AuthenticationFailedException) { - String errorMessage = exception.getMessage(); - if (errorMessage.contains("존재하지 않는 이메일 정보입니다")) { - // Handle username or password error - // You can log the error message or perform any other necessary actions - setErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR, - ErrorCode.INVALID_EMAIL_ERROR, - request, response, "ID 또는 비밀번호가 올바르지 않습니다.", "DEFAULT-ERROR-01" - ); - } else if (errorMessage.contains("IMAP 설정을 해주세요")) { - // Handle IMAP/SMTP settings error - // You can log the error message or perform any other necessary actions - setErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR, - ErrorCode.IMAP_ERROR, - request, response, "IMAP/SMTP 설정을 확인하세요.", "DEFAULT-ERROR-01" - ); - } else if (errorMessage.contains("이미 존재하는 아이디입니다")) { - setErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR, - ErrorCode.ACCOUNT_EXISTS_ERROR, - request, response, "아이디 중복.", "DEFAULT-ERROR-01" - ); - }else if (errorMessage.contains("이미 존재하는 닉네임입니다")) { - setErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR, - ErrorCode.NAME_EXISTS_ERROR, - request, response, "닉네임 중복.", "DEFAULT-ERROR-01" - ); - }else if(errorMessage.contains("잘못")){setErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR, - ErrorCode.NAME_ERROR, - request, response, "잘못.", "DEFAULT-ERROR-01" - );} - } - } - - - private void setErrorResponse(HttpStatus status, - ErrorCode code, - HttpServletRequest request, - HttpServletResponse response, - String exceptionMessage, - String errorCode) { - response.setStatus(status.value()); - response.setContentType("application/json"); - ErrorResponse errorResponse = new ErrorResponse(code, exceptionMessage); - try { - log.error("에러코드 "+errorCode+": "+exceptionMessage+", 요청 url: "+request.getRequestURI()); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(objectMapper.writeValueAsString(errorResponse)); - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/com/Nunbody/jwt/JwtAuthenticationFilter.java b/src/main/java/com/Nunbody/jwt/JwtAuthenticationFilter.java index cd2a313..4232341 100644 --- a/src/main/java/com/Nunbody/jwt/JwtAuthenticationFilter.java +++ b/src/main/java/com/Nunbody/jwt/JwtAuthenticationFilter.java @@ -3,46 +3,44 @@ import com.Nunbody.global.config.auth.MemberAuthentication; import com.Nunbody.global.error.ErrorCode; import com.Nunbody.global.error.exception.UnauthorizedException; -import com.Nunbody.jwt.exception.EmptyTokenException; -import com.Nunbody.jwt.exception.InvalidTokenException; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; -import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; @RequiredArgsConstructor public class JwtAuthenticationFilter extends OncePerRequestFilter { - private static final String AUTHORIZATION = "Authorization"; private static final String BEARER = "Bearer "; - private final JwtTokenProvider jwtTokenProvider; + private final JwtTokenProvider jwtProvider; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { final String accessToken = getAccessTokenFromHttpServletRequest(request); - jwtTokenProvider.validateAccessToken(accessToken); - final Long userId = jwtTokenProvider.getSubject(accessToken); + jwtProvider.validateAccessToken(accessToken); + final Long userId = jwtProvider.getSubject(accessToken); setAuthentication(request, userId); filterChain.doFilter(request, response); } + private String getAccessTokenFromHttpServletRequest(HttpServletRequest request) { String accessToken = request.getHeader(AUTHORIZATION); if (StringUtils.hasText(accessToken) && accessToken.startsWith(BEARER)) { return accessToken.substring(BEARER.length()); } - throw new UnauthorizedException(ErrorCode.INVALID_ACCESS_TOKEN_VALUE); + throw new UnauthorizedException(ErrorCode.INVALID_ACCESS_TOKEN_ERROR); } + private void setAuthentication(HttpServletRequest request, Long userId) { MemberAuthentication authentication = new MemberAuthentication(userId, null, null); authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(authentication); } -} \ No newline at end of file +}