1+ //package jpabasic.truthaiserver.jwt;
2+ //
3+ //import jakarta.servlet.FilterChain;
4+ //import jakarta.servlet.ServletException;
5+ //import jakarta.servlet.http.HttpServletRequest;
6+ //import jakarta.servlet.http.HttpServletResponse;
7+ //import jpabasic.truthaiserver.domain.User;
8+ //import jpabasic.truthaiserver.repository.UserRepository;
9+ //import jpabasic.truthaiserver.security.CustomUserDetails;
10+ //import jpabasic.truthaiserver.service.JwtService;
11+ //import lombok.RequiredArgsConstructor;
12+ //import lombok.extern.slf4j.Slf4j;
13+ //import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
14+ //import org.springframework.security.core.context.SecurityContextHolder;
15+ //import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
16+ //import org.springframework.stereotype.Component;
17+ //import org.springframework.web.filter.OncePerRequestFilter;
18+ //
19+ //import java.io.IOException;
20+ //import java.util.Optional;
21+ //
22+ //@Slf4j
23+ //@RequiredArgsConstructor
24+ //@Component
25+ //public class JwtFilter extends OncePerRequestFilter {
26+ //
27+ // private final JwtService jwtService;
28+ // private final UserRepository userRepository;
29+ //
30+ // @Override
31+ // protected void doFilterInternal(
32+ // HttpServletRequest request,
33+ // HttpServletResponse response,
34+ // FilterChain filterChain
35+ // ) throws ServletException, IOException {
36+ //
37+ // // 이미 인증되어 있으면 패스
38+ // if (SecurityContextHolder.getContext().getAuthentication() == null) {
39+ // String token = jwtService.extractToken(request);
40+ //
41+ // if (token != null) {
42+ // try {
43+ // if (jwtService.validateAccessToken(token)) {
44+ // // 토큰이 유효한 경우
45+ // authenticateUser(token, request);
46+ // } else {
47+ // // 토큰이 만료되었거나 유효하지 않은 경우
48+ // log.debug("JWT 토큰이 유효하지 않음");
49+ // response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
50+ // response.getWriter().write("{\"error\":\"토큰이 만료되었거나 유효하지 않습니다.\",\"code\":\"TOKEN_EXPIRED\"}");
51+ // return;
52+ // }
53+ // } catch (Exception e) {
54+ // // 토큰 파싱 실패 등 예외 발생 시
55+ // log.debug("JWT 토큰 검증 실패: {}", e.getMessage());
56+ // response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
57+ // response.getWriter().write("{\"error\":\"토큰 형식이 올바르지 않습니다.\",\"code\":\"INVALID_TOKEN\"}");
58+ // return;
59+ // }
60+ // } else {
61+ // // 토큰이 없는 경우
62+ // log.debug("JWT 토큰이 요청에 포함되지 않음");
63+ // response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
64+ // response.getWriter().write("{\"error\":\"인증 토큰이 필요합니다.\",\"code\":\"TOKEN_REQUIRED\"}");
65+ // return;
66+ // }
67+ // }
68+ //
69+ // filterChain.doFilter(request, response);
70+ // }
71+ //
72+ // private void authenticateUser(String token, HttpServletRequest request) {
73+ // try {
74+ // Long userId = jwtService.getUserIdByParseToken(token);
75+ // Optional<User> userOpt = userRepository.findById(userId);
76+ //
77+ // if (userOpt.isPresent()) {
78+ // User user = userOpt.get();
79+ // CustomUserDetails principal = new CustomUserDetails(user);
80+ //
81+ // UsernamePasswordAuthenticationToken authentication =
82+ // new UsernamePasswordAuthenticationToken(
83+ // principal,
84+ // null,
85+ // principal.getAuthorities()
86+ // );
87+ // authentication.setDetails(
88+ // new WebAuthenticationDetailsSource().buildDetails(request)
89+ // );
90+ //
91+ // SecurityContextHolder.getContext().setAuthentication(authentication);
92+ // log.debug("사용자 인증 성공 - userId: {}", userId);
93+ // }
94+ // } catch (Exception e) {
95+ // log.error("사용자 인증 처리 중 오류 발생: {}", e.getMessage());
96+ // }
97+ // }
98+ //}
99+
100+
1101package jpabasic .truthaiserver .jwt ;
2102
3103import jakarta .servlet .FilterChain ;
9109import jpabasic .truthaiserver .security .CustomUserDetails ;
10110import jpabasic .truthaiserver .service .JwtService ;
11111import lombok .RequiredArgsConstructor ;
12- import lombok .extern .slf4j .Slf4j ;
13112import org .springframework .security .authentication .UsernamePasswordAuthenticationToken ;
14113import org .springframework .security .core .context .SecurityContextHolder ;
15114import org .springframework .security .web .authentication .WebAuthenticationDetailsSource ;
19118import java .io .IOException ;
20119import java .util .Optional ;
21120
22- @ Slf4j
121+ //@RequiredArgsConstructor
122+ //@Component
123+ //public class JwtFilter extends OncePerRequestFilter {
124+ //
125+ // private final JwtService jwtService;
126+ //
127+ // @Override
128+ // protected void doFilterInternal(HttpServletRequest request,
129+ // HttpServletResponse response,
130+ // FilterChain filterChain) throws ServletException, IOException {
131+ // String token = jwtService.extractToken(request);
132+ // if (token != null && jwtService.validateAccessToken(token)) {
133+ // var userDetails = jwtService.getUserDetailsFromToken(token);
134+ //
135+ // var authentication = new UsernamePasswordAuthenticationToken(
136+ // userDetails, null, userDetails.getAuthorities()
137+ // );
138+ // authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
139+ //
140+ // SecurityContextHolder.getContext().setAuthentication(authentication);
141+ // }
142+ //
143+ // filterChain.doFilter(request, response);
144+ // }
145+ //}
146+
23147@ RequiredArgsConstructor
24148@ Component
25149public class JwtFilter extends OncePerRequestFilter {
26150
27151 private final JwtService jwtService ;
28- private final UserRepository userRepository ;
152+ private final UserRepository userRepository ; // ✅ User 조회 위해 주입
29153
30154 @ Override
31155 protected void doFilterInternal (
@@ -38,61 +162,31 @@ protected void doFilterInternal(
38162 if (SecurityContextHolder .getContext ().getAuthentication () == null ) {
39163 String token = jwtService .extractToken (request );
40164
41- if (token != null ) {
42- try {
43- if (jwtService .validateAccessToken (token )) {
44- // 토큰이 유효한 경우
45- authenticateUser (token , request );
46- } else {
47- // 토큰이 만료되었거나 유효하지 않은 경우
48- log .debug ("JWT 토큰이 유효하지 않음" );
49- response .setStatus (HttpServletResponse .SC_UNAUTHORIZED );
50- response .getWriter ().write ("{\" error\" :\" 토큰이 만료되었거나 유효하지 않습니다.\" ,\" code\" :\" TOKEN_EXPIRED\" }" );
51- return ;
52- }
53- } catch (Exception e ) {
54- // 토큰 파싱 실패 등 예외 발생 시
55- log .debug ("JWT 토큰 검증 실패: {}" , e .getMessage ());
56- response .setStatus (HttpServletResponse .SC_UNAUTHORIZED );
57- response .getWriter ().write ("{\" error\" :\" 토큰 형식이 올바르지 않습니다.\" ,\" code\" :\" INVALID_TOKEN\" }" );
58- return ;
59- }
60- } else {
61- // 토큰이 없는 경우
62- log .debug ("JWT 토큰이 요청에 포함되지 않음" );
63- response .setStatus (HttpServletResponse .SC_UNAUTHORIZED );
64- response .getWriter ().write ("{\" error\" :\" 인증 토큰이 필요합니다.\" ,\" code\" :\" TOKEN_REQUIRED\" }" );
65- return ;
66- }
67- }
165+ if (token != null && jwtService .validateAccessToken (token )) {
166+ Long userId = jwtService .getUserIdByParseToken (token );
68167
69- filterChain .doFilter (request , response );
70- }
168+ Optional <User > userOpt = userRepository .findById (userId );
169+ if (userOpt .isPresent ()) {
170+ User user = userOpt .get ();
71171
72- private void authenticateUser (String token , HttpServletRequest request ) {
73- try {
74- Long userId = jwtService .getUserIdByParseToken (token );
75- Optional <User > userOpt = userRepository .findById (userId );
76-
77- if (userOpt .isPresent ()) {
78- User user = userOpt .get ();
79- CustomUserDetails principal = new CustomUserDetails (user );
172+ // ✅ 엔티티 포함한 UserDetails
173+ CustomUserDetails principal = new CustomUserDetails (user );
80174
81- UsernamePasswordAuthenticationToken authentication =
82- new UsernamePasswordAuthenticationToken (
83- principal ,
84- null ,
85- principal .getAuthorities ()
86- );
87- authentication .setDetails (
88- new WebAuthenticationDetailsSource ().buildDetails (request )
89- );
175+ UsernamePasswordAuthenticationToken authentication =
176+ new UsernamePasswordAuthenticationToken (
177+ principal ,
178+ null ,
179+ principal .getAuthorities ()
180+ );
181+ authentication .setDetails (
182+ new WebAuthenticationDetailsSource ().buildDetails (request )
183+ );
90184
91- SecurityContextHolder .getContext ().setAuthentication (authentication );
92- log . debug ( "사용자 인증 성공 - userId: {}" , userId );
185+ SecurityContextHolder .getContext ().setAuthentication (authentication );
186+ }
93187 }
94- } catch (Exception e ) {
95- log .error ("사용자 인증 처리 중 오류 발생: {}" , e .getMessage ());
96188 }
189+
190+ filterChain .doFilter (request , response );
97191 }
98192}
0 commit comments