Skip to content

Commit 9baa73e

Browse files
authored
[refactor] CustomAuthenticationFilter 의 addCorsHeader 제거 & Same site 방지
1 parent c0b24f7 commit 9baa73e

6 files changed

Lines changed: 61 additions & 25 deletions

File tree

backend/src/main/java/com/back/global/config/SecurityConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public UrlBasedCorsConfigurationSource corsConfigurationSource() {
8787
config.setAllowedMethods(corsProperties.getAllowedMethods());
8888
config.setAllowedHeaders(corsProperties.getAllowedHeaders());
8989
config.setAllowCredentials(true);
90+
config.setMaxAge(3600L);
9091

9192
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
9293
source.registerCorsConfiguration("/**", config);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.back.global.properties;
2+
3+
import org.springframework.boot.context.properties.ConfigurationProperties;
4+
import org.springframework.stereotype.Component;
5+
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
@Getter
10+
@Setter
11+
@Component
12+
@ConfigurationProperties(prefix = "cookie")
13+
public class CookieProperties {
14+
private boolean secure;
15+
private String sameSite;
16+
private String domain;
17+
}

backend/src/main/java/com/back/global/security/CustomAuthenticationFilter.java

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import java.util.Map;
66
import java.util.Set;
77

8+
import org.springframework.http.HttpHeaders;
9+
import org.springframework.http.ResponseCookie;
810
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
911
import org.springframework.security.core.Authentication;
1012
import org.springframework.security.core.authority.SimpleGrantedAuthority;
@@ -19,7 +21,7 @@
1921
import com.back.domain.user.repository.UserRepository;
2022
import com.back.global.error.code.AuthErrorCode;
2123
import com.back.global.error.exception.ErrorException;
22-
import com.back.global.properties.SiteProperties;
24+
import com.back.global.properties.CookieProperties;
2325

2426
import jakarta.servlet.FilterChain;
2527
import jakarta.servlet.ServletException;
@@ -40,18 +42,15 @@ public class CustomAuthenticationFilter extends OncePerRequestFilter {
4042

4143
private final JwtProvider jwtProvider;
4244
private final AuthTokenService tokenService;
43-
private final SiteProperties siteProperties;
4445
private final UserRepository userRepository;
46+
private final CookieProperties cookieProperties;
4547

4648
@Override
4749
protected void doFilterInternal(
4850
HttpServletRequest request,
4951
HttpServletResponse response,
5052
FilterChain filterChain
5153
) throws ServletException, IOException {
52-
53-
addCorsHeaders(response);
54-
5554
try {
5655
authenticate(request, response, filterChain);
5756
} catch (ErrorException e) {
@@ -173,30 +172,28 @@ private String ensureValidAccessToken(
173172

174173
JwtDto newTokens = tokenService.generateTokens(user);
175174

176-
addCookie(response, "accessToken", newTokens.accessToken(), request.isSecure());
177-
addCookie(response, "refreshToken", newTokens.refreshToken(), request.isSecure());
175+
addCookie(response, "accessToken", newTokens.accessToken());
176+
addCookie(response, "refreshToken", newTokens.refreshToken());
178177

179178
return newTokens.accessToken();
180179
}
181180

182181
private void addCookie(
183182
HttpServletResponse response,
184183
String name,
185-
String value,
186-
boolean secure
184+
String value
187185
) {
188-
Cookie cookie = new Cookie(name, value);
189-
cookie.setPath("/");
190-
cookie.setHttpOnly(true);
191-
cookie.setSecure(secure);
192-
response.addCookie(cookie);
193-
}
186+
ResponseCookie.ResponseCookieBuilder builder = ResponseCookie.from(name, value)
187+
.httpOnly(true)
188+
.path("/")
189+
.secure(cookieProperties.isSecure())
190+
.sameSite(cookieProperties.getSameSite());
191+
192+
if (cookieProperties.getDomain() != null && !cookieProperties.getDomain().isBlank()) {
193+
builder.domain(cookieProperties.getDomain());
194+
}
194195

195-
private void addCorsHeaders(HttpServletResponse response) {
196-
response.setHeader("Access-Control-Allow-Origin", "http://localhost:5173");
197-
response.setHeader("Access-Control-Allow-Credentials", "true");
198-
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, PATCH, OPTIONS");
199-
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
200-
response.setHeader("Access-Control-Max-Age", "3600");
196+
ResponseCookie cookie = builder.build();
197+
response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());
201198
}
202199
}

backend/src/main/resources/application-dev.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,9 @@ spring:
1010

1111
security:
1212
password:
13-
bcrypt-strength: 4
13+
bcrypt-strength: 4
14+
15+
cookie:
16+
secure: false
17+
same-site: Lax
18+
domain: ""

backend/src/main/resources/application-prod.yml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,14 @@ management:
6666
include: health,prometheus
6767
endpoint:
6868
health:
69-
show-details: never
69+
show-details: never
70+
71+
# TODO: 프론트 완료 후 아래 주석처리 한 걸로 교체
72+
cookie:
73+
secure: false
74+
same-site: Lax
75+
domain: ""
76+
#cookie:
77+
# secure: true
78+
# same-site: None
79+
# domain: ".waitfair.shop"

backend/src/main/resources/application.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,23 @@ springdoc:
4242
custom:
4343
cors:
4444
allowed-origins:
45+
- https://www.waitfair.shop
4546
- http://localhost:3000
4647
- http://localhost:5173
47-
- http://localhost:8080
4848
allowed-methods:
4949
- GET
5050
- POST
5151
- PUT
5252
- DELETE
5353
- OPTIONS
5454
allowed-headers:
55-
- "*"
55+
- "Authorization"
56+
- "Content-Type"
57+
- "Accept"
58+
- "Origin"
59+
- "X-Requested-With"
60+
- "Cache-Control"
61+
- "Pragma"
5662

5763
jwt:
5864
secret: ${JWT_SECRET}

0 commit comments

Comments
 (0)