Skip to content

Commit

Permalink
🚑 Interceptor 반환 데이터 변경 및 관련 코드 리팩토링
Browse files Browse the repository at this point in the history
issue:#251
  • Loading branch information
Ting-Kim committed Jun 30, 2022
1 parent ff6de49 commit 229f5c0
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.depromeet.sulsul.common.interceptor;

import static com.depromeet.sulsul.util.HttpResponseUtil.processWithErrorResponseDto;
import static com.depromeet.sulsul.util.PropertyUtil.getMemberIdFromPrincipal;
import static org.apache.http.HttpStatus.SC_UNAUTHORIZED;
import static org.springframework.http.HttpStatus.UNAUTHORIZED;

import com.depromeet.sulsul.domain.member.entity.Member;
import com.depromeet.sulsul.domain.member.repository.MemberRepository;
Expand Down Expand Up @@ -30,11 +31,11 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
long memberIdFromPrincipal = getMemberIdFromPrincipal(
SecurityContextHolder.getContext().getAuthentication());

Optional<Member> memberOptional = memberRepository.findById(memberIdFromPrincipal);
Optional<Member> memberOptional = memberRepository.findByIdAndDeletedAtIsNotNull(memberIdFromPrincipal);

if (memberOptional.isEmpty()) {
log.debug("There is no member corresponding to the id that exists in the token.");
response.sendError(SC_UNAUTHORIZED, "There is no member corresponding to the id that exists in the token.");
processWithErrorResponseDto("[ERROR] 존재하지 않는 사용자입니다.", UNAUTHORIZED, response);
return false;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.depromeet.sulsul.domain.member.repository;

import com.depromeet.sulsul.domain.member.entity.Member;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {

Long findLevelById(Long id);
Optional<Member> findByIdAndDeletedAtIsNotNull(Long id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ public TokenDto publishAccessToken(HttpServletResponse response, String refreshT
Claims claims = jwtTokenProvider.getAllClaimsFromToken(refreshToken);

Long memberId = Long.parseLong(claims.getSubject());
Member member = memberRepository.findById(memberId).orElseThrow(MemberNotFoundException::new);
Member member = memberRepository.findById(memberId)
.orElseThrow(MemberNotFoundException::new);

String newAccessToken = jwtTokenProvider.createAccessToken(member);
String newRefreshToken = jwtTokenProvider.createRefreshToken(member);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
package com.depromeet.sulsul.oauth2.handler;

import static com.depromeet.sulsul.util.HttpResponseUtil.processWithErrorResponseDto;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.UNAUTHORIZED;

import com.depromeet.sulsul.common.response.dto.ResponseDto;
import com.depromeet.sulsul.oauth2.filter.JwtAuthenticationFilter;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;

@Component
public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint {
Expand All @@ -28,30 +26,11 @@ public void commence(HttpServletRequest request, HttpServletResponse response,
Integer jwtParseResultWhenDenied = Integer.parseInt(
response.getHeader(JwtAuthenticationFilter.JWT_PARSE_RESULT));

setResponseJsonType(response);

if (jwtParseResultWhenDenied == BAD_REQUEST.value()) {
processWithErrorResponseDto("[ERROR] jwt가 없거나 잘못 되었습니다.", BAD_REQUEST, response);
return;
}
if (jwtParseResultWhenDenied == UNAUTHORIZED.value()) {
processWithErrorResponseDto("[ERROR] jwt가 만료되었습니다.", UNAUTHORIZED, response);
return;
}

response.sendError(HttpServletResponse.SC_UNAUTHORIZED, authException.getLocalizedMessage());
}

private void processWithErrorResponseDto(String errorMessage, HttpStatus httpStatus,
HttpServletResponse response) throws IOException {
String responseBodyWithJson = objectMapper.writeValueAsString(
ResponseDto.ERROR(errorMessage, httpStatus));
response.getWriter().write(responseBodyWithJson);
response.setStatus(httpStatus.value());
}

private void setResponseJsonType(HttpServletResponse response) {
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
processWithErrorResponseDto("[ERROR] jwt가 만료되었습니다.", UNAUTHORIZED, response);
}
}
26 changes: 26 additions & 0 deletions src/main/java/com/depromeet/sulsul/util/HttpResponseUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.depromeet.sulsul.util;

import com.depromeet.sulsul.common.response.dto.ResponseDto;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;

public class HttpResponseUtil {

private static final ObjectMapper objectMapper = new ObjectMapper();

public static void processWithErrorResponseDto(String errorMessage, HttpStatus httpStatus,
HttpServletResponse response) throws IOException {
String responseBodyWithJson = objectMapper.writeValueAsString(
ResponseDto.ERROR(errorMessage, httpStatus));
setResponseJsonType(response);
response.getWriter().write(responseBodyWithJson);
response.setStatus(httpStatus.value());
}

public static void setResponseJsonType(HttpServletResponse response) {
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
}
}
6 changes: 6 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,9 @@ cloud:
bucket: sulsul-media-bucket
stack:
auto: false

logging:
level:
org:
hibernate:
type: trace

0 comments on commit 229f5c0

Please sign in to comment.