Skip to content

Commit 47e930c

Browse files
committed
refactor/ remove outh2OnlyFilterchain
1 parent d642f43 commit 47e930c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+474
-313
lines changed

src/main/java/org/fontory/fontorybe/authentication/adapter/inbound/annotation/OAuth2.java

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/main/java/org/fontory/fontorybe/authentication/adapter/inbound/resolver/OAuth2InfoArgumentResolver.java

Lines changed: 0 additions & 47 deletions
This file was deleted.

src/main/java/org/fontory/fontorybe/authentication/adapter/inbound/security/JwtOnlyOAuth2RequireFilter.java

Lines changed: 0 additions & 62 deletions
This file was deleted.

src/main/java/org/fontory/fontorybe/authentication/application/AuthService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.fontory.fontorybe.authentication.application;
22

3+
import jakarta.servlet.http.HttpServletResponse;
34
import lombok.RequiredArgsConstructor;
45
import org.fontory.fontorybe.authentication.application.dto.ResponseCookies;
56
import org.fontory.fontorybe.authentication.application.port.CookieUtils;
@@ -25,7 +26,7 @@ public class AuthService {
2526
* 새롭게 토큰 발급
2627
* 기존에 토큰이 존재한다면 제거, 기존 토큰이 존재할 필요 X
2728
*/
28-
public TokenResponse issueNewTokens(Member member) {
29+
private TokenResponse issueNewTokens(Member member) {
2930
UserPrincipal user = UserPrincipal.from(member);
3031

3132
String accessToken = jwtTokenProvider.generateAccessToken(user);
@@ -55,7 +56,8 @@ public ResponseCookies refreshAuthCookies(Long memberId, String providedRefreshT
5556
return issueAuthCookies(member);
5657
}
5758

58-
public void removeRefreshToken(Member member) {
59+
public void clearAuthCookies(HttpServletResponse res, Member member) {
60+
cookieUtils.clearAuthCookies(res);
5961
tokenStorage.removeRefreshToken(member);
6062
}
6163
}

src/main/java/org/fontory/fontorybe/common/adapter/inbound/DebugController.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import lombok.RequiredArgsConstructor;
66
import org.fontory.fontorybe.authentication.adapter.inbound.annotation.Login;
77
import org.fontory.fontorybe.authentication.application.port.CookieUtils;
8-
import org.fontory.fontorybe.authentication.application.port.JwtTokenProvider;
98
import org.fontory.fontorybe.authentication.domain.UserPrincipal;
9+
import org.fontory.fontorybe.common.application.DevTokenInitializer;
1010
import org.fontory.fontorybe.font.service.dto.FontRequestProduceDto;
1111
import org.fontory.fontorybe.font.service.port.FontRequestProducer;
1212
import org.slf4j.MDC;
@@ -21,8 +21,8 @@
2121
@RestController
2222
@RequiredArgsConstructor
2323
public class DebugController {
24+
private final DevTokenInitializer devTokenInitializer;
2425
private final FontRequestProducer fontRequestProducer;
25-
private final JwtTokenProvider jwtTokenProvider;
2626
private final CookieUtils cookieUtils;
2727

2828
@Value("${commit.hash}")
@@ -58,15 +58,18 @@ public String cookies(HttpServletRequest request) {
5858

5959
@GetMapping("/debug/auth/me")
6060
public String me(
61-
HttpServletRequest request,
6261
@Login UserPrincipal userPrincipal
6362
) {
64-
// if userprincipal null, exception in argument Resolver
6563
return String.valueOf(userPrincipal.getId());
6664
}
6765

66+
@GetMapping("/debug/login")
67+
public void login(HttpServletResponse res) {
68+
devTokenInitializer.issueTestAccessCookies(res);
69+
}
70+
6871
@GetMapping("/debug/logout")
69-
public void me(HttpServletResponse res) {
70-
cookieUtils.clearAuthCookies(res);
72+
public void logout(HttpServletResponse res) {
73+
devTokenInitializer.removeTestAccessCookies(res);
7174
}
7275
}

src/main/java/org/fontory/fontorybe/common/adapter/inbound/GlobalExceptionHandler.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.fontory.fontorybe.bookmark.domain.exception.BookmarkNotFoundException;
99
import org.fontory.fontorybe.common.domain.BaseErrorResponse;
1010
import org.fontory.fontorybe.file.adapter.inbound.exception.FileUploadException;
11+
import org.fontory.fontorybe.file.adapter.inbound.exception.UnsupportedFileTypeException;
1112
import org.fontory.fontorybe.file.domain.exception.InvalidMultipartRequestException;
1213
import org.fontory.fontorybe.file.domain.exception.SingleFileRequiredException;
1314
import org.fontory.fontorybe.font.domain.exception.FontNotFoundException;
@@ -128,4 +129,10 @@ public BaseErrorResponse singleFileRequiredException(SingleFileRequiredException
128129
public BaseErrorResponse invalidMultipartRequest(InvalidMultipartRequestException e) {
129130
return new BaseErrorResponse(e.getMessage());
130131
}
132+
133+
@ResponseStatus(HttpStatus.BAD_REQUEST)
134+
@ExceptionHandler(UnsupportedFileTypeException.class)
135+
public BaseErrorResponse unsupportedFileType(UnsupportedFileTypeException e) {
136+
return new BaseErrorResponse(e.getMessage());
137+
}
131138
}

src/main/java/org/fontory/fontorybe/common/application/DevTokenInitializer.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
import io.jsonwebtoken.Jwts;
44
import io.jsonwebtoken.io.Decoders;
55
import io.jsonwebtoken.security.Keys;
6+
import jakarta.servlet.http.HttpServletResponse;
67
import jakarta.transaction.Transactional;
78
import lombok.Getter;
89
import lombok.RequiredArgsConstructor;
910
import lombok.extern.slf4j.Slf4j;
11+
import org.fontory.fontorybe.authentication.application.AuthService;
12+
import org.fontory.fontorybe.authentication.application.port.CookieUtils;
1013
import org.fontory.fontorybe.config.S3Config;
1114
import org.fontory.fontorybe.config.jwt.JwtProperties;
1215
import org.fontory.fontorybe.member.domain.Member;
@@ -15,9 +18,10 @@
1518
import org.fontory.fontorybe.provide.domain.Provide;
1619
import org.fontory.fontorybe.provide.infrastructure.entity.Provider;
1720
import org.fontory.fontorybe.provide.service.port.ProvideRepository;
18-
import org.springframework.beans.factory.annotation.Value;
1921
import org.springframework.context.ApplicationListener;
2022
import org.springframework.context.event.ContextRefreshedEvent;
23+
import org.springframework.http.HttpHeaders;
24+
import org.springframework.http.ResponseCookie;
2125
import org.springframework.stereotype.Component;
2226

2327
import javax.crypto.SecretKey;
@@ -30,15 +34,20 @@
3034
@RequiredArgsConstructor
3135
public class DevTokenInitializer implements ApplicationListener<ContextRefreshedEvent> {
3236

37+
private final AuthService authService;
3338
private final JwtProperties props;
39+
private final CookieUtils cookieUtils;
3440
private final ProvideRepository provideRepository;
3541
private final MemberRepository memberRepository;
3642
private final JwtProperties jwtProperties;
37-
3843
// 고정된 발행 및 만료 시간
3944
private final Date issuedAt = new Date(1735689600000L); // 2025-01-01T00:00:00Z
4045
private final Date expiration = new Date(1767225600000L); // 2025-12-31T23:59:59Z
4146

47+
private String fixedTokenForProvide;
48+
private String fixedTokenForAuthentication;
49+
private Member testMember;
50+
4251
@Getter
4352
private String fixedTokenForFontCreateServer;
4453

@@ -85,15 +94,16 @@ public void initTokens() {
8594
.build();
8695

8796
Member savedMember = memberRepository.save(member);
97+
testMember = savedMember;
8898

89-
String fixedTokenForProvide = Jwts.builder()
99+
fixedTokenForProvide = Jwts.builder()
90100
.setSubject(String.valueOf(savedProvide.getId()))
91101
.setIssuedAt(issuedAt)
92102
.setExpiration(expiration)
93103
.signWith(provideSecretKey)
94104
.compact();
95105

96-
String fixedTokenForAuthentication = Jwts.builder()
106+
fixedTokenForAuthentication = Jwts.builder()
97107
.setSubject(String.valueOf(savedMember.getId()))
98108
.setIssuedAt(issuedAt)
99109
.setExpiration(expiration)
@@ -111,4 +121,13 @@ public void initTokens() {
111121
log.info("Authentication JWT for development: {}", fixedTokenForAuthentication);
112122
log.info("FontCreateServer JWT: {}", fixedTokenForFontCreateServer);
113123
}
124+
125+
public void issueTestAccessCookies(HttpServletResponse response) {
126+
ResponseCookie accessTokenCookie = cookieUtils.createAccessTokenCookie(fixedTokenForAuthentication);
127+
response.addHeader(HttpHeaders.SET_COOKIE, accessTokenCookie.toString());
128+
}
129+
130+
public void removeTestAccessCookies(HttpServletResponse response) {
131+
authService.clearAuthCookies(response, testMember);
132+
}
114133
}

src/main/java/org/fontory/fontorybe/config/S3Config.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class S3Config {
1717
private final Map<FileType, String> bucketMap = new EnumMap<>(FileType.class);
1818

1919
@Getter
20-
private static String defaultProfileImageUrl;
20+
private static String defaultProfileImageUrl = "testUrl";
2121

2222
@Value("${default.profile.url}")
2323
public void setDefaultProfileImageUrl(String defaultProfileImageUrl) {

src/main/java/org/fontory/fontorybe/config/SecurityConfig.java

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.fontory.fontorybe.authentication.adapter.inbound.CustomOauth2UserService;
77
import org.fontory.fontorybe.authentication.adapter.inbound.security.JwtAuthenticationFilter;
88
import org.fontory.fontorybe.authentication.adapter.inbound.security.JwtFontCreateServerFilter;
9-
import org.fontory.fontorybe.authentication.adapter.inbound.security.JwtOnlyOAuth2RequireFilter;
109
import org.fontory.fontorybe.authentication.application.AuthService;
1110
import org.fontory.fontorybe.authentication.application.port.CookieUtils;
1211
import org.fontory.fontorybe.authentication.application.port.JwtTokenProvider;
@@ -27,6 +26,7 @@
2726
import org.springframework.security.web.SecurityFilterChain;
2827
import org.springframework.security.web.access.ExceptionTranslationFilter;
2928
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
29+
import org.springframework.security.web.util.matcher.AndRequestMatcher;
3030
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
3131
import org.springframework.security.web.util.matcher.NegatedRequestMatcher;
3232
import org.springframework.security.web.util.matcher.OrRequestMatcher;
@@ -115,41 +115,18 @@ public SecurityFilterChain fontCreateServerSecurityFilterChain(HttpSecurity http
115115
}
116116

117117
/**
118-
* 3. jwtOnlySecurityFilterChain
119-
* 회원가입전 OAUTH2를 발급한 임시 토큰을 검증하기 위한 JwtOnlyProvideRequireFilter만 적용되는 컨트롤러
120-
* 회원가입전 사진업로드(POST, "/files/profile-image"), 회원가입(POST, "/member")
121-
*/
122-
@Bean
123-
@Order(3)
124-
public SecurityFilterChain jwtOnlySecurityFilterChain(HttpSecurity http) throws Exception {
125-
return http
126-
.securityMatcher(new OrRequestMatcher(
127-
new AntPathRequestMatcher("/member", HttpMethod.POST.name())
128-
))
129-
.cors(cors -> cors.configurationSource(corsConfigurationSource))
130-
.sessionManagement(AbstractHttpConfigurer::disable)
131-
.csrf(CsrfConfigurer::disable)
132-
.httpBasic(HttpBasicConfigurer::disable)
133-
.formLogin(FormLoginConfigurer::disable)
134-
.authorizeHttpRequests(auth -> auth.anyRequest().permitAll())
135-
.addFilterBefore(new JwtOnlyOAuth2RequireFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class)
136-
.build();
137-
}
138-
139-
// 3. 기본 체인: 그 외의 모든 요청에 대해 JWT 인증 필터 적용
140-
141-
/**
142-
* 4. defaultSecurityFilterChain
118+
* 3. defaultSecurityFilterChain
143119
* 그 외의 모든 요청에 대해 JWT 인증 필터 적용
144120
*/
145121
@Bean
146-
@Order(4)
122+
@Order(3)
147123
public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
148124
return http
149-
.securityMatcher(new NegatedRequestMatcher(new OrRequestMatcher(
150-
new AntPathRequestMatcher("/files/profile-image", HttpMethod.POST.name()),
151-
new AntPathRequestMatcher("/member", HttpMethod.POST.name())
152-
)))
125+
.securityMatcher(
126+
new OrRequestMatcher(
127+
new NegatedRequestMatcher(new AntPathRequestMatcher("/debug/**")),
128+
new AntPathRequestMatcher("/debug/auth/me", HttpMethod.GET.name())
129+
))
153130
.cors(cors -> cors.configurationSource(corsConfigurationSource))
154131
.sessionManagement(AbstractHttpConfigurer::disable)
155132
.csrf(CsrfConfigurer::disable)
@@ -166,7 +143,6 @@ public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws
166143
// 그 외엔 인증 필요
167144
.anyRequest().authenticated()
168145
)
169-
// .addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
170146
.build();
171147
}
172148

src/main/java/org/fontory/fontorybe/config/WebConfig.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.util.List;
44

55
import org.fontory.fontorybe.authentication.adapter.inbound.resolver.LoginMemberArgumentResolver;
6-
import org.fontory.fontorybe.authentication.adapter.inbound.resolver.OAuth2InfoArgumentResolver;
76
import org.springframework.context.annotation.Bean;
87
import org.springframework.context.annotation.Configuration;
98
import org.springframework.web.cors.CorsConfiguration;
@@ -20,13 +19,11 @@
2019
public class WebConfig implements WebMvcConfigurer {
2120

2221
private final LoginMemberArgumentResolver loginMemberArgumentResolver;
23-
private final OAuth2InfoArgumentResolver oAuth2InfoArgumentResolver;
2422
private final PerformanceInterceptor performanceInterceptor;
2523

2624
@Override
2725
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
2826
argumentResolvers.add(loginMemberArgumentResolver);
29-
argumentResolvers.add(oAuth2InfoArgumentResolver);
3027
}
3128

3229
@Override

0 commit comments

Comments
 (0)