Skip to content

Commit 254d10f

Browse files
authored
Merge pull request #162 from Susanghan-guys/feat/#161-report-redirect
feat: ๋ฆฌํฌํŠธ ๋ฆฌ๋””๋ ‰์…˜ ์ˆ˜์ •
2 parents 6f7e92e + 5e24738 commit 254d10f

File tree

4 files changed

+43
-9
lines changed

4 files changed

+43
-9
lines changed

โ€Žsrc/main/java/com/susanghan_guys/server/global/config/SecurityConfig.javaโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.susanghan_guys.server.global.config;
22

3-
import com.susanghan_guys.server.global.filter.RedirectUriFilter;
3+
import com.susanghan_guys.server.oauth2.filter.RedirectUriFilter;
44
import com.susanghan_guys.server.global.security.handler.JwtAccessDeniedHandler;
55
import com.susanghan_guys.server.global.security.handler.JwtAuthenticationEntryPoint;
66
import com.susanghan_guys.server.global.security.jwt.JwtAuthenticationFilter;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.susanghan_guys.server.oauth2.domain.validator;
2+
3+
import org.springframework.beans.factory.annotation.Value;
4+
import org.springframework.stereotype.Component;
5+
6+
import java.net.URI;
7+
import java.net.URISyntaxException;
8+
9+
@Component
10+
public class RedirectValidator {
11+
12+
@Value("${frontend.oauth2.allowed-redirect-origin}")
13+
private String allowedOrigin;
14+
15+
public boolean isAuthorized(String redirect) {
16+
try {
17+
URI uri = new URI(redirect);
18+
19+
String origin = uri.getScheme() + "://" + uri.getHost();
20+
if (uri.getPort() != -1) {
21+
origin += ":" + uri.getPort();
22+
}
23+
24+
return allowedOrigin.equalsIgnoreCase(origin);
25+
} catch (URISyntaxException e) {
26+
return false;
27+
}
28+
}
29+
}

src/main/java/com/susanghan_guys/server/global/filter/RedirectUriFilter.java renamed to src/main/java/com/susanghan_guys/server/oauth2/filter/RedirectUriFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.susanghan_guys.server.global.filter;
1+
package com.susanghan_guys.server.oauth2.filter;
22

33
import jakarta.servlet.FilterChain;
44
import jakarta.servlet.ServletException;

โ€Žsrc/main/java/com/susanghan_guys/server/oauth2/handler/OAuth2SuccessHandler.javaโ€Ž

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import com.susanghan_guys.server.global.security.jwt.JwtProvider;
55
import com.susanghan_guys.server.oauth2.domain.RefreshToken;
6+
import com.susanghan_guys.server.oauth2.domain.validator.RedirectValidator;
67
import com.susanghan_guys.server.oauth2.infrastructure.persistence.RefreshTokenRepository;
78
import com.susanghan_guys.server.global.security.CustomUserDetails;
89
import com.susanghan_guys.server.global.util.RedisUtil;
@@ -36,8 +37,13 @@ public class OAuth2SuccessHandler implements AuthenticationSuccessHandler {
3637
private final ObjectMapper objectMapper;
3738
private final RedisUtil redisUtil;
3839

39-
@Value("${frontend.oauth2.base-redirect-uri}")
40-
private String baseRedirectUri;
40+
@Value("${frontend.oauth2.allowed-redirect-origin}")
41+
private String allowedOrigin;
42+
43+
@Value("${frontend.oauth2.base-redirect-path}")
44+
private String baseRedirectPath;
45+
46+
private final RedirectValidator redirectValidator;
4147

4248
@Override
4349
public void onAuthenticationSuccess(
@@ -67,16 +73,15 @@ public void onAuthenticationSuccess(
6773
"isSignUp", String.valueOf(isSignUp)
6874
)), 1000 * 60L);
6975

70-
String redirectPath = Arrays.stream(Optional.ofNullable(request.getCookies()).orElse(new Cookie[0]))
76+
String redirectUri = Arrays.stream(Optional.ofNullable(request.getCookies()).orElse(new Cookie[0]))
7177
.filter(c -> "redirect".equals(c.getName()))
7278
.findFirst()
7379
.map(c -> URLDecoder.decode(c.getValue(), StandardCharsets.UTF_8))
74-
.orElse("/oauth/callback");
75-
76-
String targetUri = baseRedirectUri + redirectPath;
80+
.filter(redirectValidator::isAuthorized)
81+
.orElse(allowedOrigin + baseRedirectPath);
7782

7883
String callbackUri = UriComponentsBuilder
79-
.fromUriString(targetUri)
84+
.fromUriString(redirectUri)
8085
.queryParam("code", tempCode)
8186
.build()
8287
.toUriString();

0 commit comments

Comments
ย (0)