Skip to content

Commit ce0eb5a

Browse files
committed
feat/OPS-324 : state 정보를 저장하는 resolver 추가.
1 parent fbf04da commit ce0eb5a

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.tuna.zoopzoop.backend.domain.auth.resolver;
2+
3+
import jakarta.servlet.http.HttpServletRequest;
4+
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
5+
import org.springframework.security.oauth2.client.web.DefaultOAuth2AuthorizationRequestResolver;
6+
import org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestResolver;
7+
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest;
8+
9+
public class CustomOAuth2AuthorizationRequestResolver implements OAuth2AuthorizationRequestResolver {
10+
11+
private final OAuth2AuthorizationRequestResolver defaultResolver;
12+
13+
public CustomOAuth2AuthorizationRequestResolver(ClientRegistrationRepository repo, String authorizationRequestBaseUri) {
14+
this.defaultResolver = new DefaultOAuth2AuthorizationRequestResolver(repo, authorizationRequestBaseUri);
15+
}
16+
17+
@Override
18+
public OAuth2AuthorizationRequest resolve(HttpServletRequest request) {
19+
return customize(defaultResolver.resolve(request), request);
20+
}
21+
22+
@Override
23+
public OAuth2AuthorizationRequest resolve(HttpServletRequest request, String clientRegistrationId) {
24+
return customize(defaultResolver.resolve(request, clientRegistrationId), request);
25+
}
26+
27+
private OAuth2AuthorizationRequest customize(OAuth2AuthorizationRequest req, HttpServletRequest request) {
28+
if (req == null) return null;
29+
30+
String source = request.getParameter("source"); // 로그인 시작 시 전달된 source
31+
32+
OAuth2AuthorizationRequest.Builder builder = OAuth2AuthorizationRequest.from(req);
33+
34+
if ("extension".equals(source)) {
35+
// state에 source 정보를 안전하게 포함
36+
builder.state("source:extension;" + req.getState());
37+
38+
// 필요하다면 redirectUri도 동적으로 변경 가능
39+
// builder.redirectUri("https://api.test.zoopzoop.kro.kr/login/oauth2/code/kakao");
40+
}
41+
42+
return builder.build();
43+
}
44+
}

src/main/java/org/tuna/zoopzoop/backend/global/security/SecurityConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
import org.springframework.context.annotation.Bean;
55
import org.springframework.context.annotation.Configuration;
66
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
7+
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
78
import org.springframework.security.web.SecurityFilterChain;
89
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
910
import org.tuna.zoopzoop.backend.domain.auth.handler.OAuth2SuccessHandler;
11+
import org.tuna.zoopzoop.backend.domain.auth.resolver.CustomOAuth2AuthorizationRequestResolver;
1012
import org.tuna.zoopzoop.backend.domain.auth.service.CustomOAuth2UserService;
1113
import org.tuna.zoopzoop.backend.global.security.jwt.CustomAuthenticationEntryPoint;
1214
import org.tuna.zoopzoop.backend.global.security.jwt.JwtAuthenticationFilter;
@@ -18,6 +20,7 @@ public class SecurityConfig {
1820
private final JwtAuthenticationFilter jwtAuthenticationFilter;
1921
private final CustomOAuth2UserService customOAuth2UserService;
2022
private final OAuth2SuccessHandler oAuth2SuccessHandler;
23+
private final ClientRegistrationRepository clientRegistrationRepository;
2124

2225
@Bean
2326
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
@@ -44,6 +47,13 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
4447
.anyRequest().authenticated()
4548
)
4649
.oauth2Login(oauth2 -> oauth2
50+
.authorizationEndpoint(authorization -> authorization
51+
.authorizationRequestResolver(
52+
new CustomOAuth2AuthorizationRequestResolver(
53+
clientRegistrationRepository,
54+
"/oauth2/authorization"
55+
)
56+
))
4757
.userInfoEndpoint(userInfo -> userInfo
4858
.userService(customOAuth2UserService)
4959
)

0 commit comments

Comments
 (0)