11
11
import javax .crypto .spec .SecretKeySpec ;
12
12
13
13
import org .springframework .beans .factory .annotation .Value ;
14
- import org .springframework .stereotype .Service ;
14
+ import org .springframework .stereotype .Component ;
15
15
import org .springframework .web .context .request .RequestContextHolder ;
16
16
import org .springframework .web .context .request .ServletRequestAttributes ;
17
17
18
18
import com .unit .daybook .domain .member .domain .Member ;
19
19
import com .unit .daybook .global .config .security .CustomUserDetails ;
20
20
import com .unit .daybook .global .error .exception .CustomException ;
21
21
import com .unit .daybook .global .error .exception .ErrorCode ;
22
- import com .unit .daybook .global .util .JwtUtil ;
23
22
23
+ import io .jsonwebtoken .Jwts ;
24
24
import io .jsonwebtoken .SignatureAlgorithm ;
25
25
import jakarta .servlet .http .HttpServletRequest ;
26
26
import jakarta .servlet .http .HttpSession ;
27
27
import lombok .RequiredArgsConstructor ;
28
28
import lombok .extern .slf4j .Slf4j ;
29
29
30
30
@ Slf4j
31
- @ Service
32
31
@ RequiredArgsConstructor
32
+ @ Component
33
33
public class TokenService {
34
-
35
- private static Long DEFAULT_EXPIRATION_MINUTES ;
36
- private final JwtUtil jwtUtil ;
34
+ private static final Long DEFAULT_EXPIRATION_MINUTES = 60L ;
37
35
38
36
@ Value ("${jwt.secret-key}" )
39
37
private String secretKey ;
40
38
41
- @ Value ("${util.jwt.defaultExpirationMinutes}" )
42
- public void setDefaultExpirationMinutes (Long defaultExpirationMinutes ) {
43
- TokenService .DEFAULT_EXPIRATION_MINUTES = defaultExpirationMinutes ;
44
- }
45
-
46
39
private static SecretKey createSecretKey (String key ) {
47
40
byte [] keyBytes = key .getBytes (StandardCharsets .UTF_8 );
48
41
return new SecretKeySpec (keyBytes , SignatureAlgorithm .HS256 .getJcaName ());
@@ -96,25 +89,25 @@ public String generateToken(Member user, Boolean remember) {
96
89
Long expMin = remember ? DEFAULT_EXPIRATION_MINUTES * 24 * 7 : DEFAULT_EXPIRATION_MINUTES ;
97
90
Map <String , Object > claims = generateDefaultClaims (user , expMin );
98
91
99
- return jwtUtil . generateToken (claims , createSecretKey (secretKey ));
92
+ return generateToken (claims , createSecretKey (secretKey ));
100
93
}
101
94
102
95
public String generateRefreshToken (Member user , Boolean remember ) {
103
96
Long expMin = remember ? DEFAULT_EXPIRATION_MINUTES * 24 * 30 : DEFAULT_EXPIRATION_MINUTES * 4 ;
104
97
Map <String , Object > claims = generateReFreshClaims (user , expMin );
105
98
106
- return jwtUtil . generateRefreshToken (claims , createSecretKey (secretKey ));
99
+ return generateRefreshToken (claims , createSecretKey (secretKey ));
107
100
}
108
101
109
102
public String generateToken (Member member , Long plusExpMinutes ) {
110
103
Map <String , Object > claims = generateDefaultClaims (member , plusExpMinutes );
111
104
112
- return jwtUtil . generateToken (claims , createSecretKey (secretKey ));
105
+ return generateToken (claims , createSecretKey (secretKey ));
113
106
}
114
107
115
108
public String generateRefreshToken (Member member , Long plusExpMinutes ) {
116
109
Map <String , Object > claims = generateReFreshClaims (member , plusExpMinutes );
117
- String refreshToken = jwtUtil . generateRefreshToken (claims , createSecretKey (secretKey ));
110
+ String refreshToken = generateRefreshToken (claims , createSecretKey (secretKey ));
118
111
119
112
// refreshToken을 세션에 저장
120
113
HttpServletRequest currentRequest = ((ServletRequestAttributes ) RequestContextHolder .currentRequestAttributes ()).getRequest ();
@@ -126,7 +119,7 @@ public String generateRefreshToken(Member member, Long plusExpMinutes) {
126
119
127
120
128
121
public CustomUserDetails getUserDetailsByToken (String token ) {
129
- Map <String , Object > claims = jwtUtil . getClaims (token );
122
+ Map <String , Object > claims = getClaims (token );
130
123
if (claims == null ) {
131
124
throw new CustomException (ErrorCode .CLAIMS_IS_NULL );
132
125
}
@@ -141,4 +134,41 @@ public CustomUserDetails getUserDetailsByToken(String token) {
141
134
return new CustomUserDetails (userId , userSnsId , userEmail , userNickname );
142
135
}
143
136
137
+
138
+ /**
139
+ * JWT 생성
140
+ *
141
+ * @param claims
142
+ * @return
143
+ */
144
+ private String generateToken (Map <String , Object > claims , SecretKey key ) {
145
+ return Jwts .builder ()
146
+ .setClaims (claims )
147
+ .signWith (key )
148
+ .compact ();
149
+ }
150
+
151
+ private String generateRefreshToken (Map <String , Object > claims , SecretKey key ) {
152
+ return Jwts .builder ()
153
+ .setClaims (claims )
154
+ .signWith (key )
155
+ .compact ();
156
+ }
157
+
158
+ /**
159
+ * JWT 검증 및 데이터 가져오기
160
+ *
161
+ * @param jwt
162
+ * @return
163
+ */
164
+ private Map <String , Object > getClaims (String jwt ) {
165
+ if (jwt == null || jwt .isEmpty ()) {
166
+ return null ;
167
+ }
168
+ return Jwts .parserBuilder ()
169
+ .setSigningKey (secretKey )
170
+ .build ()
171
+ .parseClaimsJws (jwt )
172
+ .getBody ();
173
+ }
144
174
}
0 commit comments