Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/#222 날짜, 시간 제한 Filter 를 Interceptor 에서 동작하도록 변경 #223

Merged
merged 9 commits into from
Oct 5, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
import org.mju_likelion.festival.announcement.dto.response.SimpleAnnouncementsResponse;
import org.mju_likelion.festival.announcement.service.AnnouncementQueryService;
import org.mju_likelion.festival.announcement.service.AnnouncementService;
import org.mju_likelion.festival.common.annotaion.page_number.PageNumber;
import org.mju_likelion.festival.common.annotaion.page_size.PageSize;
import org.mju_likelion.festival.common.authentication.AuthenticationPrincipal;
import org.mju_likelion.festival.common.enums.SortOrder;
import org.mju_likelion.festival.common.util.annotaion.page_number.PageNumber;
import org.mju_likelion.festival.common.util.annotaion.page_size.PageSize;
import org.mju_likelion.festival.common.util.enums.SortOrder;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import lombok.RequiredArgsConstructor;
import org.mju_likelion.festival.announcement.domain.AnnouncementDetail;
import org.mju_likelion.festival.announcement.domain.SimpleAnnouncement;
import org.mju_likelion.festival.common.enums.SortOrder;
import org.mju_likelion.festival.common.util.enums.SortOrder;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
import org.mju_likelion.festival.announcement.domain.repository.AnnouncementQueryRepository;
import org.mju_likelion.festival.announcement.dto.response.AnnouncementDetailResponse;
import org.mju_likelion.festival.announcement.dto.response.SimpleAnnouncementsResponse;
import org.mju_likelion.festival.common.enums.SortOrder;
import org.mju_likelion.festival.common.exception.NotFoundException;
import org.mju_likelion.festival.common.util.enums.SortOrder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@
import org.mju_likelion.festival.booth.dto.response.SimpleBoothResponse;
import org.mju_likelion.festival.booth.dto.response.SimpleBoothResponses;
import org.mju_likelion.festival.booth.util.qr.manager.BoothQrManager;
import org.mju_likelion.festival.common.circuit_breaker.FallBackUtil;
import org.mju_likelion.festival.common.exception.BadRequestException;
import org.mju_likelion.festival.common.exception.ForbiddenException;
import org.mju_likelion.festival.common.exception.NotFoundException;
import org.mju_likelion.festival.common.util.circuit_breaker.FallBackUtil;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.mju_likelion.festival.booth.dto.request.UpdateBoothRequest;
import org.mju_likelion.festival.booth.util.qr.BoothQrStrategy;
import org.mju_likelion.festival.booth.util.qr.manager.BoothQrManager;
import org.mju_likelion.festival.common.circuit_breaker.FallBackUtil;
import org.mju_likelion.festival.common.util.circuit_breaker.FallBackUtil;
import org.mju_likelion.festival.user.domain.User;
import org.mju_likelion.festival.user.service.UserQueryService;
import org.springframework.cache.annotation.CacheEvict;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@
import static org.mju_likelion.festival.common.exception.type.ErrorType.JWT_NOT_FOUND_ERROR;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.mju_likelion.festival.auth.util.jwt.JwtUtil;
import org.mju_likelion.festival.auth.util.jwt.Payload;
import org.mju_likelion.festival.common.authentication.AuthenticationContext;
import org.mju_likelion.festival.common.authentication.AuthorizationExtractor;
import org.mju_likelion.festival.common.exception.ForbiddenException;
import org.mju_likelion.festival.common.exception.UnauthorizedException;
import org.mju_likelion.festival.common.exception.type.ErrorType;
import org.mju_likelion.festival.common.interceptor.RestInterceptor;
import org.mju_likelion.festival.common.util.request_matcher.AllowedRequestMatcherProvider;
import org.mju_likelion.festival.common.util.request_matcher.RequestMatcher;
import org.springframework.web.servlet.HandlerInterceptor;

public abstract class AbstractAuthenticationInterceptor implements HandlerInterceptor {
public abstract class AbstractAuthenticationInterceptor extends RestInterceptor implements
AllowedRequestMatcherProvider {

private final AuthenticationContext authenticationContext;
private final JwtUtil userJwtUtil;
Expand All @@ -29,15 +29,7 @@ protected AbstractAuthenticationInterceptor(final AuthenticationContext authenti
}

@Override
public boolean preHandle(
final HttpServletRequest request,
final HttpServletResponse response,
final Object handler) {

if (isPassableRequest(request)) {
return true;
}

protected boolean doInternal(final HttpServletRequest request) {
String accessToken = AuthorizationExtractor.extract(request)
.orElseThrow(() -> new UnauthorizedException(JWT_NOT_FOUND_ERROR));
Payload payload = userJwtUtil.getPayload(accessToken);
Expand All @@ -52,31 +44,14 @@ public boolean preHandle(
return true;
}

private boolean isPassableRequest(final HttpServletRequest request) {
return isOptionsRequest(request) || isRequestPermitted(request);
}

private boolean isOptionsRequest(final HttpServletRequest request) {
return Objects.equals(request.getMethod(), "OPTIONS");
}

/**
* HTTP 메서드에 따른 요청 허용 여부를 판단한다.
*
* @param request 요청
* @return 허용 여부
*/
private boolean isRequestPermitted(final HttpServletRequest request) {
@Override
protected boolean isPermittedApi(final HttpServletRequest request) {
return getAllowedRequestMatchers().stream()
.anyMatch(matcher -> matcher.matches(request));
}

/**
* 허용 요청 매처 목록을 반환한다. 오버라이딩하지 않는다면 빈 목록을 반환한다.
*
* @return 요청 매처 목록
*/
protected List<RequestMatcher> getAllowedRequestMatchers() {
@Override
public List<RequestMatcher> getAllowedRequestMatchers() {
return new ArrayList<>();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public BoothAdminAuthenticationInterceptor(
}

@Override
protected List<RequestMatcher> getAllowedRequestMatchers() {
public List<RequestMatcher> getAllowedRequestMatchers() {
List<RequestMatcher> allowedRequestMatchers = new LinkedList<>();
allowedRequestMatchers.add(new RequestMatcher(HttpMethod.GET, GET_BOOTH));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public StudentCouncilAuthenticationInterceptor(
}

@Override
protected List<RequestMatcher> getAllowedRequestMatchers() {
public List<RequestMatcher> getAllowedRequestMatchers() {
List<RequestMatcher> allowedRequestMatchers = new LinkedList<>();
allowedRequestMatchers.add(new RequestMatcher(HttpMethod.GET, GET_ALL_ANNOUNCEMENTS));
allowedRequestMatchers.add(new RequestMatcher(HttpMethod.GET, GET_ANNOUNCEMENT));
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import lombok.RequiredArgsConstructor;
import org.mju_likelion.festival.common.authentication.config.AuthenticationConfig;
import org.mju_likelion.festival.common.logging.config.LoggingConfig;
import org.mju_likelion.festival.common.restriction.date_restriction.DateRestrictionInterceptor;
import org.mju_likelion.festival.common.restriction.time_restriction.BoothOperationTimeRestrictionInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand All @@ -20,6 +22,8 @@ public class WebConfig implements WebMvcConfigurer {
private static final String ALLOWED_METHOD_NAMES = "GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,PATCH";
private final AuthenticationConfig authenticationConfig;
private final LoggingConfig loggingConfig;
private final DateRestrictionInterceptor dateRestrictionInterceptor;
private final BoothOperationTimeRestrictionInterceptor boothOperationTimeRestrictionInterceptor;
@Value("${client.hosts}")
private List<String> clientHosts;

Expand All @@ -41,6 +45,8 @@ public RestTemplate restTemplate() {
@Override
public void addInterceptors(final InterceptorRegistry registry) {
loggingConfig.addInterceptors(registry);
registry.addInterceptor(dateRestrictionInterceptor);
registry.addInterceptor(boothOperationTimeRestrictionInterceptor);
authenticationConfig.addInterceptors(registry);
}

Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Loading
Loading