Skip to content

Commit

Permalink
[Merge] 충돌 해결
Browse files Browse the repository at this point in the history
  • Loading branch information
JungYoonShin committed Jan 30, 2025
2 parents d5e1ec6 + b59498a commit a441dbe
Show file tree
Hide file tree
Showing 34 changed files with 548 additions and 429 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ dependencies {
runtimeOnly 'com.mysql:mysql-connector-j'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'com.h2database:h2'

// Lombok
compileOnly 'org.projectlombok:lombok'
Expand Down
93 changes: 81 additions & 12 deletions logs/logfile.log

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.favoriteplace.app.item.controller;

import com.favoriteplace.global.auth.resolver.UserEmail;
import com.favoriteplace.app.item.controller.dto.ItemDto;
import com.favoriteplace.app.item.service.ShopService;
import com.favoriteplace.global.util.SecurityUtil;
Expand Down Expand Up @@ -33,7 +34,8 @@ public ResponseEntity<ItemDto.ItemListResDto> getAlwaysSellProduct(HttpServletRe
}

@GetMapping("/new")
public ResponseEntity<ItemDto.NewItemListResDto> getNewItemList() {
public ResponseEntity<ItemDto.NewItemListResDto> getNewItemList(@UserEmail String email) {
System.out.println("email = " + email);
return ResponseEntity.ok(shopService.getNewItemList());
}

Expand All @@ -45,7 +47,10 @@ public ResponseEntity<ItemDto.ItemDetailResDto> getItemDetail(
}

@PostMapping("/purchase/{item_id}")
public ResponseEntity<ItemDto.ItemPurchaseRes> buyItem(@PathVariable("item_id") Long itemId) {
public ResponseEntity<ItemDto.ItemPurchaseRes> buyItem(
@PathVariable("item_id") Long itemId,
@UserEmail String userEmail
) {
return ResponseEntity.ok(shopService.buyItem(itemId));
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.favoriteplace.app.member.controller;

import com.favoriteplace.app.member.controller.dto.TokenInfoDto;
import com.favoriteplace.global.auth.provider.JwtTokenProvider;
import com.favoriteplace.app.member.controller.dto.KaKaoSignUpRequestDto;
import com.favoriteplace.app.member.controller.dto.MemberDto;
import com.favoriteplace.app.member.controller.dto.MemberDto.EmailCheckReqDto;
import com.favoriteplace.app.member.controller.dto.MemberDto.EmailDuplicateResDto;
import com.favoriteplace.app.member.controller.dto.MemberDto.EmailSendResDto;
import com.favoriteplace.app.member.controller.dto.MemberDto.TokenInfo;
import com.favoriteplace.app.member.controller.dto.MemberSignUpReqDto;
import com.favoriteplace.app.member.service.MailSendService;
import com.favoriteplace.app.member.service.MemberService;
import com.favoriteplace.global.security.provider.JwtTokenProvider;
import com.favoriteplace.global.util.SecurityUtil;

import jakarta.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -40,7 +40,7 @@ public class MemberController {
private final SecurityUtil securityUtil;

@PostMapping("/login/kakao")
public ResponseEntity<TokenInfo> kakaoLogin(
public ResponseEntity<TokenInfoDto> kakaoLogin(
@RequestHeader("Authorization") final String token
) {
return ResponseEntity.ok(memberService.kakaoLogin(token));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import com.favoriteplace.app.member.domain.enums.LoginType;
import com.favoriteplace.app.member.domain.enums.MemberStatus;
import com.favoriteplace.app.item.domain.Item;

import jakarta.validation.constraints.*;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -22,14 +24,14 @@ public static class MemberSignUpResDto {
private String accessToken;
private String refreshToken;

public static MemberSignUpResDto from(Member member, TokenInfo tokenInfo) {
public static MemberSignUpResDto from(Member member, TokenInfoDto tokenInfo) {
return MemberSignUpResDto.builder()
.nickname(member.getNickname())
.introduction(member.getDescription())
.profileImage(member.getProfileImageUrl())
.profileTitleItem(member.getProfileTitle().getDefaultImage().getUrl())
.accessToken(tokenInfo.accessToken)
.refreshToken(tokenInfo.refreshToken)
.accessToken(tokenInfo.accessToken())
.refreshToken(tokenInfo.refreshToken())
.build();
}
}
Expand Down Expand Up @@ -79,16 +81,6 @@ public static class EmailCheckReqDto {
private Integer authNum;
}

@Builder
@Getter
@AllArgsConstructor
public static class TokenInfo {

private String grantType;
private String accessToken;
private String refreshToken;
}

@Builder
@Getter
@AllArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.favoriteplace.app.member.controller.dto;


public record TokenInfoDto(
String grantType,
String accessToken,
String refreshToken
) {
public static TokenInfoDto of(
final String accessToken,
final String refreshToken
) {
return new TokenInfoDto("Bearer", accessToken, refreshToken);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static com.favoriteplace.global.exception.ErrorCode.USER_NOT_FOUND;

import com.favoriteplace.app.member.controller.dto.MemberSignUpReqDto;
import com.favoriteplace.app.member.controller.dto.TokenInfoDto;
import com.favoriteplace.app.member.domain.Member;
import com.favoriteplace.app.item.domain.Item;
import com.favoriteplace.app.member.controller.dto.UserInfoResponseDto;
Expand All @@ -14,10 +15,10 @@
import com.favoriteplace.app.member.controller.dto.MemberDto.EmailSendReqDto;
import com.favoriteplace.app.item.repository.ItemRepository;
import com.favoriteplace.app.member.repository.MemberRepository;
import com.favoriteplace.global.auth.kakao.KakaoClient;
import com.favoriteplace.global.auth.provider.JwtTokenProvider;
import com.favoriteplace.global.exception.RestApiException;
import com.favoriteplace.global.s3Image.AmazonS3ImageManager;
import com.favoriteplace.global.security.kakao.KakaoClient;
import com.favoriteplace.global.security.provider.JwtTokenProvider;

import java.io.IOException;
import java.util.List;
Expand Down Expand Up @@ -45,7 +46,7 @@ public class MemberService {
private final RedisTemplate redisTemplate;
private final KakaoClient kakaoClient;

public MemberDto.TokenInfo kakaoLogin(final String token) {
public TokenInfoDto kakaoLogin(final String token) {
String userEmail = getUserEmailFromKakao(token);

// 최초 로그인이라면 회원가입 API로 통신하도록
Expand Down Expand Up @@ -73,11 +74,11 @@ public MemberDto.MemberSignUpResDto kakaoSignUp(
Item titleItem = getDefaultProfileItem();

Member member = saveUser(memberSignUpReqDto.nickname(), userEmail,
memberSignUpReqDto.snsAllow(), memberSignUpReqDto.introduction(),
profileImage, titleItem);
memberSignUpReqDto.snsAllow(), memberSignUpReqDto.introduction(),
profileImage, titleItem);

MemberDto.TokenInfo tokenInfo = issueToken(userEmail);
member.updateRefreshToken(tokenInfo.getRefreshToken());
TokenInfoDto tokenInfo = issueToken(userEmail);
member.updateRefreshToken(tokenInfo.refreshToken());

return MemberDto.MemberSignUpResDto.from(member, tokenInfo);

Expand All @@ -104,11 +105,11 @@ public MemberDto.MemberSignUpResDto signup(
String profileImage = getProfileImageFromRequest(images);

Member member = saveUser(memberSignUpReqDto.nickname(), memberSignUpReqDto.email(),
memberSignUpReqDto.snsAllow(), memberSignUpReqDto.introduction(),
profileImage, titleItem);
memberSignUpReqDto.snsAllow(), memberSignUpReqDto.introduction(),
profileImage, titleItem);

MemberDto.TokenInfo tokenInfo = issueToken(member.getEmail());
member.updateRefreshToken(tokenInfo.getRefreshToken());
TokenInfoDto tokenInfo= issueToken(member.getEmail());
member.updateRefreshToken(tokenInfo.refreshToken());

return MemberDto.MemberSignUpResDto.from(member, tokenInfo);
}
Expand Down Expand Up @@ -172,7 +173,7 @@ private Item getDefaultProfileItem() {
return itemRepository.findByName("새싹회원").get();
}

private MemberDto.TokenInfo issueToken(String email) {
private TokenInfoDto issueToken(String email) {
return jwtTokenProvider.generateToken(email);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.favoriteplace.app.pilgrimage.service.PilgrimageCommandService;
import com.favoriteplace.global.exception.ErrorCode;
import com.favoriteplace.global.exception.RestApiException;
import com.favoriteplace.global.security.CustomUserDetails;
import com.favoriteplace.global.auth.CustomUserDetails;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.favoriteplace.global.security;
package com.favoriteplace.global.auth;

import com.favoriteplace.app.member.domain.Member;
import java.util.Collection;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.favoriteplace.global.auth;

import lombok.RequiredArgsConstructor;

import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;

@RequiredArgsConstructor
public class JwtAuthenticationNeededPath {
private final String pathPattern;
private final String method;

public boolean matches(String requestURI, String method) {
String regex = pathPattern.replaceAll("\\*\\*", ".*");
return Pattern.matches(regex, requestURI) && this.method.equalsIgnoreCase(method);
}

public static final List<JwtAuthenticationNeededPath> NEEDED_JWT_AUTHENTICATION_PATHS = Arrays.asList(
new JwtAuthenticationNeededPath("/auth/logout", "POST"),
new JwtAuthenticationNeededPath("/pilgrimage/**", "POST"),
new JwtAuthenticationNeededPath("/pilgrimage/**", "DELETE"),
new JwtAuthenticationNeededPath("/posts/free/my-posts", "GET"),
new JwtAuthenticationNeededPath("/posts/free/my-comments", "GET"),
new JwtAuthenticationNeededPath("/posts/free", "POST"),
new JwtAuthenticationNeededPath("/posts/free/**", "DELETE"),
new JwtAuthenticationNeededPath("/posts/free/**", "POST"),
new JwtAuthenticationNeededPath("/posts/free/**", "PUT"),
new JwtAuthenticationNeededPath("/posts/free/**", "PATCH"),
new JwtAuthenticationNeededPath("/posts/guestbooks/my-comments", "GET"),
new JwtAuthenticationNeededPath("/posts/guestbooks/my-posts", "GET"),
new JwtAuthenticationNeededPath("/my", "GET"),
new JwtAuthenticationNeededPath("/my/**", "GET"),
new JwtAuthenticationNeededPath("/my/**", "PUT"),
new JwtAuthenticationNeededPath("/my/**", "PATCH"),
new JwtAuthenticationNeededPath("/posts/guestbooks/**", "PATCH"),
new JwtAuthenticationNeededPath("/posts/guestbooks/**", "DELETE"),
new JwtAuthenticationNeededPath("/posts/guestbooks/**", "POST"),
new JwtAuthenticationNeededPath("/my/blocks/**", "POST"),
new JwtAuthenticationNeededPath("/posts/free/comments/**", "PUT"),
new JwtAuthenticationNeededPath("/posts/free/comments/**", "DELETE"),
new JwtAuthenticationNeededPath("/posts/guestbooks/comments/**", "PUT"),
new JwtAuthenticationNeededPath("/posts/guestbooks/comments/**", "DELETE"),
new JwtAuthenticationNeededPath("/shop/purchase/**", "POST"),
new JwtAuthenticationNeededPath("/notifications", "PATCH"),
new JwtAuthenticationNeededPath("/notifications", "GET"),
new JwtAuthenticationNeededPath("/notifications/**", "PATCH"),
new JwtAuthenticationNeededPath("/notifications/**", "DELETE")
);

public static List<JwtAuthenticationNeededPath> getNeededPaths() {
return NEEDED_JWT_AUTHENTICATION_PATHS;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.favoriteplace.global.security.config;
package com.favoriteplace.global.auth.config;

import java.util.Properties;
import lombok.RequiredArgsConstructor;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.favoriteplace.global.security.config;
package com.favoriteplace.global.auth.config;


import com.favoriteplace.global.exception.RestApiException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.favoriteplace.global.security.config;
package com.favoriteplace.global.auth.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.favoriteplace.global.security.config;
package com.favoriteplace.global.auth.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand All @@ -10,7 +10,6 @@
@Configuration
public class RedisConfig {

// Bean 이름 지정
@Bean(name = "customRedisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.favoriteplace.global.security.config;
package com.favoriteplace.global.auth.config;

import com.favoriteplace.global.auth.filter.ExceptionHandlerFilter;
import com.favoriteplace.global.auth.filter.JwtAuthenticationFilter;
import com.favoriteplace.global.auth.filter.LoginFilter;
import com.favoriteplace.global.auth.handler.CustomAuthenticationFailHandler;
import com.favoriteplace.global.auth.handler.CustomAuthenticationSuccessHandler;
import com.favoriteplace.global.auth.provider.JwtTokenProvider;

import com.favoriteplace.global.security.filter.ExceptionHandlerFilter;
import com.favoriteplace.global.security.filter.JwtAuthenticationEntryPoint;
import com.favoriteplace.global.security.filter.JwtAuthenticationFilter;
import com.favoriteplace.global.security.filter.LoginFilter;
import com.favoriteplace.global.security.handler.CustomAuthenticationFailHandler;
import com.favoriteplace.global.security.handler.CustomAuthenticationSuccessHandler;
import com.favoriteplace.global.security.handler.JwtAccessDeniedHandler;
import com.favoriteplace.global.security.provider.JwtTokenProvider;
import lombok.RequiredArgsConstructor;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
Expand All @@ -31,9 +31,6 @@ public class SecurityConfig {
private final JwtTokenProvider jwtTokenProvider;
private final RedisTemplate redisTemplate;
private final ExceptionHandlerFilter exceptionHandlerFilter;

private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;
private final JwtAccessDeniedHandler jwtAccessDeniedHandler;
private final AuthenticationManagerBuilder authManagerBuilder;
private final CustomAuthenticationSuccessHandler successHandler;
private final CustomAuthenticationFailHandler failureHandler;
Expand Down
Loading

0 comments on commit a441dbe

Please sign in to comment.