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

fix: booking security 설정 core로 이동 #165

Merged
merged 5 commits into from
Jan 9, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions api/api-booking/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,4 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-security'

implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.pgms.apibooking.common.exception;

import com.pgms.coredomain.domain.common.BookingErrorCode;

import lombok.Getter;

@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.coredomain.response.ErrorResponse;

import lombok.extern.slf4j.Slf4j;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import com.pgms.apibooking.common.exception.BookingErrorCode;
import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.apibooking.common.exception.BookingException;

import jakarta.servlet.http.HttpServletRequest;
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.pgms.apibooking.common.exception.BookingErrorCode;
import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.apibooking.common.exception.BookingException;
import com.pgms.apibooking.common.jwt.BookingAuthToken;
import com.pgms.coresecurity.security.jwt.booking.BookingAuthToken;
import com.pgms.apibooking.config.TossPaymentConfig;
import com.pgms.apibooking.domain.booking.dto.request.BookingCancelRequest;
import com.pgms.apibooking.domain.booking.dto.request.BookingCreateRequest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

import org.springframework.stereotype.Service;

import com.pgms.apibooking.common.exception.BookingErrorCode;
import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.apibooking.common.exception.BookingException;
import com.pgms.apibooking.common.jwt.BookingJwtPayload;
import com.pgms.apibooking.common.jwt.BookingJwtProvider;
import com.pgms.coresecurity.security.jwt.booking.BookingJwtPayload;
import com.pgms.coresecurity.security.jwt.booking.BookingJwtProvider;
import com.pgms.apibooking.domain.bookingqueue.dto.request.BookingQueueEnterRequest;
import com.pgms.apibooking.domain.bookingqueue.dto.request.BookingQueueExitRequest;
import com.pgms.apibooking.domain.bookingqueue.dto.request.TokenIssueRequest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import com.pgms.apibooking.domain.payment.dto.response.PaymentCardResponse;
import com.pgms.apibooking.domain.payment.dto.response.PaymentFailResponse;
import com.pgms.apibooking.domain.payment.dto.response.PaymentVirtualResponse;
import com.pgms.apibooking.common.exception.BookingErrorCode;
import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.apibooking.common.exception.BookingException;
import com.pgms.apibooking.common.util.DateTimeUtil;
import com.pgms.coredomain.domain.booking.Booking;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import com.pgms.apibooking.domain.payment.dto.request.PaymentConfirmRequest;
import com.pgms.apibooking.domain.payment.dto.response.PaymentCancelResponse;
import com.pgms.apibooking.domain.payment.dto.response.PaymentSuccessResponse;
import com.pgms.apibooking.common.exception.BookingErrorCode;
import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.apibooking.common.exception.BookingException;

import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

import com.pgms.apibooking.domain.seat.dto.request.SeatsGetRequest;
import com.pgms.apibooking.domain.seat.dto.response.AreaResponse;
import com.pgms.apibooking.common.exception.BookingErrorCode;
import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.apibooking.common.exception.BookingException;
import com.pgms.coredomain.domain.event.EventSeat;
import com.pgms.coredomain.domain.event.EventSeatStatus;
Expand Down
7 changes: 1 addition & 6 deletions api/api-booking/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,6 @@ spring:
payment:
toss:
test-client-api-key: test_ck_Gv6LjeKD8aE1pdWDXXNw8wYxAdXy
test-secret-api-key: test_sk_eqRGgYO1r5MNel9067jarQnN2Eya # 노출되면 안됨!! 임시값 넣어놓음
test-secret-api-key: test # 노출되면 안됨!! 임시값 넣어놓음
success-url: https://localhost:8080/api/v1/success
fail-url: https://localhost:8080/api/v1/fail

booking-jwt:
issuer: booking
secret-key: EENY5W0eegTf1naQB2eDeyCLl5kRS2b8xa5c4qLdS0hmVjtbvo8tOyhPMcAmtPu
expiry-seconds: 420
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import com.pgms.apibooking.domain.payment.dto.response.PaymentSuccessResponse;
import com.pgms.apibooking.domain.payment.dto.response.PaymentVirtualResponse;
import com.pgms.apibooking.domain.payment.dto.response.RefundAccountResponse;
import com.pgms.apibooking.common.exception.BookingErrorCode;
import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.apibooking.common.exception.BookingException;
import com.pgms.apibooking.domain.payment.service.TossPaymentService;
import com.pgms.coredomain.domain.booking.Booking;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import org.springframework.context.annotation.Import;
import org.springframework.transaction.annotation.Transactional;

import com.pgms.apibooking.common.exception.BookingErrorCode;
import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.apibooking.common.exception.BookingException;
import com.pgms.apibooking.config.TestConfig;
import com.pgms.apibooking.domain.booking.dto.request.BookingCancelRequest;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.pgms.apibooking.common.exception;
package com.pgms.coredomain.domain.common;

import org.springframework.http.HttpStatus;

import com.pgms.coredomain.response.ErrorResponse;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum BookingErrorCode {
public enum BookingErrorCode implements BaseErrorCode{
SEAT_NOT_FOUND(HttpStatus.BAD_REQUEST, "SEAT_NOT_FOUND", "존재하지 않는 좌석입니다."),
SEAT_BEING_BOOKED(HttpStatus.BAD_REQUEST, "SEAT_BEING_BOOKED", "예매중인 좌석입니다."),
SEAT_ALREADY_BOOKED(HttpStatus.BAD_REQUEST, "SEAT_ALREADY_BOOKED", "예매된 좌석입니다."),
Expand Down Expand Up @@ -41,4 +43,9 @@ public enum BookingErrorCode {
private final HttpStatus status;
private final String code;
private final String message;

@Override
public ErrorResponse getErrorResponse() {
return new ErrorResponse(code, message);
}
}
6 changes: 3 additions & 3 deletions core/core-security/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ dependencies {
// security
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

업데이트 해주셔서 감사합니다 🙇‍♀️

implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package com.pgms.apibooking.config;
package com.pgms.coresecurity.security.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.pgms.apibooking.common.jwt.BookingJwtProvider;
import com.pgms.coresecurity.security.jwt.booking.BookingJwtProvider;

import io.jsonwebtoken.security.Keys;
import lombok.Getter;

@Getter
@Configuration
public class JwtConfig {
public class BookingJwtConfig {

@Value("${booking-jwt.issuer}")
private String issuer;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.pgms.coresecurity.security.jwt;

import java.security.Key;
import java.time.Instant;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.UUID;
import java.util.stream.Collectors;

import javax.crypto.SecretKey;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
Expand All @@ -23,7 +24,6 @@
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.MalformedJwtException;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.UnsupportedJwtException;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;
Expand All @@ -48,24 +48,24 @@ public String generateAccessToken(UserDetailsImpl userDetails) {

return Jwts.builder()
.claim("id", userDetails.getId())
.setSubject((userDetails.getUsername()))
.setIssuedAt(Date.from(now))
.setExpiration(Date.from(expirationTime))
.subject((userDetails.getUsername()))
.issuedAt(Date.from(now))
.expiration(Date.from(expirationTime))
.claim("authority", authorities)
.signWith(key(), SignatureAlgorithm.HS256)
.signWith(key())
.compact();
}

private Key key() {
private SecretKey key() {
return Keys.hmacShaKeyFor(Decoders.BASE64.decode(secretKey));
}

public Authentication getAuthentication(String accessToken) {
Claims claims = Jwts.parserBuilder()
.setSigningKey(key())
Claims claims = Jwts.parser()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

미뤄두고 있었는데 감사합니다 ☺️

.verifyWith(key())
.build()
.parseClaimsJws(accessToken)
.getBody();
.parseSignedClaims(accessToken)
.getPayload();

Collection<? extends GrantedAuthority> authorities =
Arrays.stream(claims.get("authority").toString().split(","))
Expand All @@ -79,7 +79,7 @@ public Authentication getAuthentication(String accessToken) {

public boolean validateAccessToken(String authToken) {
try {
Jwts.parserBuilder().setSigningKey(key()).build().parse(authToken);
Jwts.parser().verifyWith(key()).build().parse(authToken);
return true;
} catch (MalformedJwtException e) {
logger.error("Invalid JWT token: {}", e.getMessage());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.pgms.apibooking.common.exception;
package com.pgms.coresecurity.security.jwt.booking;

import java.io.IOException;

Expand All @@ -8,6 +8,8 @@
import org.springframework.stereotype.Component;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.pgms.coredomain.domain.common.BaseErrorCode;
import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.coredomain.response.ErrorResponse;

import jakarta.servlet.ServletException;
Expand All @@ -28,11 +30,11 @@ public BookingAuthEntryPoint() {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HttpResponseUtil 을 만들어 놓은게 있어서 이걸 적용하면 될 거 같아요~!

Suggested change
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
@Slf4j
public class BookingAuthEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException {
BaseErrorCode errorCode = BookingErrorCode.BOOKING_TOKEN_NOT_EXIST;
ErrorResponse errorResponse = errorCode.getErrorResponse();
HttpResponseUtil.setErrorResponse(response, errorCode.getStatus(), errorResponse);
}
}

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제거했습니다!

BookingErrorCode errorCode = BookingErrorCode.BOOKING_TOKEN_NOT_EXIST;
BaseErrorCode errorCode = BookingErrorCode.BOOKING_TOKEN_NOT_EXIST;
response.setStatus(errorCode.getStatus().value());
response.setContentType(MediaType.APPLICATION_JSON_VALUE);

ErrorResponse errorResponse = new ErrorResponse(errorCode.getCode(), errorCode.getMessage());
ErrorResponse errorResponse = errorCode.getErrorResponse();
response.getWriter().write(objectMapper.writeValueAsString(errorResponse));
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.pgms.apibooking.common.jwt;
package com.pgms.coresecurity.security.jwt.booking;

import org.springframework.security.authentication.AbstractAuthenticationToken;

Expand Down
Loading