Skip to content

Commit c169503

Browse files
committed
[CICD] securityConfig 수정
1 parent be49cc3 commit c169503

2 files changed

Lines changed: 34 additions & 36 deletions

File tree

src/main/java/fitfit/domain/token/filter/JwtAuthenticationFilter.java

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,65 +6,60 @@
66
import jakarta.servlet.http.HttpServletRequest;
77
import jakarta.servlet.http.HttpServletResponse;
88
import lombok.RequiredArgsConstructor;
9-
import org.springframework.http.HttpMethod;
9+
import org.springframework.lang.NonNull;
1010
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
1111
import org.springframework.security.core.context.SecurityContextHolder;
1212
import org.springframework.security.core.userdetails.UserDetails;
1313
import org.springframework.security.core.userdetails.UserDetailsService;
1414
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
1515
import org.springframework.stereotype.Component;
16-
import org.springframework.util.AntPathMatcher;
1716
import org.springframework.web.filter.OncePerRequestFilter;
1817

1918
import java.io.IOException;
20-
import java.util.List;
2119

2220
@Component
2321
@RequiredArgsConstructor
2422
public class JwtAuthenticationFilter extends OncePerRequestFilter {
25-
// 토큰 없이도 가능하게
26-
private static final List<String> WHITE_LIST = List.of(
27-
"/swagger-ui.html",
28-
"/auth/**",
29-
"/swagger-ui/**",
30-
"/v3/api-docs/**",
31-
"/api/members/auth/kko",
32-
"/auth/refresh"
33-
);
3423

3524
private final JwtProvider jwtProvider;
3625
private final UserDetailsService userDetailsService;
37-
private final AntPathMatcher antPathMatcher = new AntPathMatcher();
3826

3927
@Override
40-
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
28+
protected void doFilterInternal(
29+
@NonNull HttpServletRequest request,
30+
@NonNull HttpServletResponse response,
31+
@NonNull FilterChain filterChain
32+
) throws ServletException, IOException {
33+
34+
final String authHeader = request.getHeader("Authorization");
35+
36+
if (authHeader == null) {
37+
filterChain.doFilter(request, response);
38+
return;
39+
}
40+
41+
Long memberId = null;
4142
try {
42-
Long memberId = jwtProvider.getMemberIdAndValidateToken(request.getHeader("Authorization"));
43+
memberId = jwtProvider.getMemberIdAndValidateToken(authHeader);
44+
} catch (Exception e) {
45+
SecurityContextHolder.clearContext();
46+
}
4347

44-
UserDetails userDetails = userDetailsService.loadUserByUsername(memberId.toString());
45-
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
48+
if (memberId != null && SecurityContextHolder.getContext().getAuthentication() == null) {
49+
UserDetails userDetails = this.userDetailsService.loadUserByUsername(memberId.toString());
50+
51+
UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(
4652
userDetails,
4753
null,
4854
userDetails.getAuthorities()
4955
);
50-
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
51-
SecurityContextHolder.getContext().setAuthentication(authentication);
52-
} catch (Exception e) {
53-
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
54-
response.getWriter().write("{\"error\": \"" + e.getMessage() + "\"}");
55-
return;
56-
}
57-
58-
filterChain.doFilter(request, response);
59-
}
56+
authToken.setDetails(
57+
new WebAuthenticationDetailsSource().buildDetails(request)
58+
);
6059

61-
@Override
62-
protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
63-
if (request.getMethod().equalsIgnoreCase(HttpMethod.OPTIONS.name())) {
64-
return true;
60+
SecurityContextHolder.getContext().setAuthentication(authToken);
6561
}
6662

67-
// 더 안정적인 AntPathMatcher.match() 로 수정
68-
return WHITE_LIST.stream().anyMatch(white -> antPathMatcher.match(white, request.getRequestURI()));
63+
filterChain.doFilter(request, response);
6964
}
7065
}

src/main/java/fitfit/global/security/config/SecurityConfig.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,14 @@ public SecurityFilterChain filterChain (HttpSecurity http) throws Exception {
3434
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
3535
.authorizeHttpRequests(auth -> auth
3636
.requestMatchers(
37-
HttpMethod.OPTIONS, "/**",
38-
"/swagger-ui.html",
39-
"/auth/**",
37+
HttpMethod.OPTIONS, "/**"
38+
).permitAll()
39+
.requestMatchers(
4040
"/swagger-ui/**",
4141
"/v3/api-docs/**",
42+
"/swagger-resources/**",
43+
"/webjars/**",
44+
"/auth/**",
4245
"/api/members/auth/kko",
4346
"/auth/refresh"
4447
).permitAll()

0 commit comments

Comments
 (0)