Skip to content

Commit d7645ab

Browse files
authored
Merge pull request #205 from Team-HMH/develop
fix - 토큰 재발급 문제 해결
2 parents 3517d6f + a6370d2 commit d7645ab

File tree

7 files changed

+55
-28
lines changed

7 files changed

+55
-28
lines changed

src/main/java/sopt/org/hmh/domain/auth/service/AuthFacade.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import sopt.org.hmh.domain.auth.dto.response.ReissueResponse;
77
import sopt.org.hmh.domain.challenge.dto.request.NewChallengeOrder;
88
import sopt.org.hmh.domain.challenge.service.ChallengeFacade;
9+
import sopt.org.hmh.domain.slack.builder.NewUserSlackMessageBuilder;
10+
import sopt.org.hmh.domain.slack.constant.SlackStatus;
911
import sopt.org.hmh.domain.user.domain.User;
1012
import sopt.org.hmh.domain.auth.dto.request.SocialSignUpRequest;
1113
import sopt.org.hmh.domain.auth.dto.response.LoginResponse;
@@ -27,6 +29,7 @@ public class AuthFacade {
2729
private final ChallengeFacade challengeFacade;
2830
private final TokenService tokenService;
2931
private final UserService userService;
32+
private final NewUserSlackMessageBuilder newUserSlackMessageBuilder;
3033

3134
@Transactional(readOnly = true)
3235
public LoginResponse login(String socialAccessToken, SocialPlatform socialPlatform) {
@@ -41,7 +44,7 @@ public LoginResponse signup(SocialSignUpRequest request, String socialAccessToke
4144
SocialPlatform socialPlatform = request.socialPlatform();
4245
String socialId = this.getSocialIdBySocialAccessToken(socialPlatform, socialAccessToken);
4346

44-
User newUser = userService.addUser(socialPlatform, socialId, request.name(), os);
47+
User newUser = userService.addUser(socialPlatform, socialId, request.name());
4548
Long newUserId = newUser.getId();
4649

4750
userService.registerOnboardingInfo(request, newUserId);
@@ -51,6 +54,8 @@ public LoginResponse signup(SocialSignUpRequest request, String socialAccessToke
5154
newUserId, os, timeZone
5255
));
5356

57+
newUserSlackMessageBuilder.sendNotification(SlackStatus.NEW_USER_SIGNUP, request.name(), os);
58+
5459
return performLogin(newUser, socialAccessToken, socialPlatform);
5560
}
5661

src/main/java/sopt/org/hmh/domain/slack/SlackSender.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ public class SlackSender {
1717

1818
private final Slack slackClient = Slack.getInstance();
1919

20-
public void sendSlackNotification(String webhookUrl, String title, Attachment attachment) {
20+
public void sendSlackNotification(String webhookUrl, String mainText, Attachment attachment) {
2121
try {
2222
slackClient.send(webhookUrl, WebhookPayloads.payload(p -> p
23-
.text(title)
23+
.text("*" + mainText + "*")
2424
.attachments(List.of(attachment))
2525
));
2626
} catch (IOException slackError) {
Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
package sopt.org.hmh.domain.slack.builder;
22

33
import com.slack.api.model.Attachment;
4+
import jakarta.servlet.ServletException;
45
import jakarta.servlet.http.HttpServletRequest;
56
import lombok.RequiredArgsConstructor;
67
import org.springframework.beans.factory.annotation.Value;
8+
import org.springframework.http.HttpStatus;
79
import org.springframework.stereotype.Component;
10+
import sopt.org.hmh.domain.auth.exception.AuthError;
811
import sopt.org.hmh.domain.slack.SlackSender;
912
import sopt.org.hmh.domain.slack.constant.SlackStatus;
13+
import sopt.org.hmh.global.auth.jwt.exception.JwtError;
14+
import sopt.org.hmh.global.common.exception.base.ErrorBase;
15+
import sopt.org.hmh.global.common.exception.base.ExceptionBase;
1016

1117
import java.time.LocalDateTime;
1218
import java.time.format.DateTimeFormatter;
1319
import java.util.List;
20+
import java.util.Objects;
21+
import java.util.Set;
1422

1523
@Component
1624
@RequiredArgsConstructor
@@ -21,25 +29,46 @@ public class ErrorSlackMessageBuilder implements SlackMessageBuilder {
2129

2230
private final SlackSender slackSender;
2331

24-
public void sendNotification(SlackStatus status, Exception e, HttpServletRequest request) {
25-
slackSender.sendSlackNotification(serverErrorWebUrl, status.getTitle(),
26-
generateSlackAttachment(status, e, request));
32+
private static final Set<String> EXCLUDED_ERROR_MESSAGES = Set.of(
33+
JwtError.INVALID_ACCESS_TOKEN.getErrorMessage(),
34+
JwtError.INVALID_SOCIAL_ACCESS_TOKEN.getErrorMessage(),
35+
AuthError.NOT_SIGNUP_USER.getErrorMessage(),
36+
AuthError.DUPLICATE_USER.getErrorMessage()
37+
);
38+
39+
private boolean shouldSendNotification(ErrorBase e) {
40+
return !EXCLUDED_ERROR_MESSAGES.contains(e.getErrorMessage());
41+
}
42+
43+
public void sendNotification(SlackStatus status, Exception exception, HttpServletRequest request) {
44+
if (exception instanceof ExceptionBase) {
45+
ErrorBase error = ((ExceptionBase) exception).getError();
46+
if (shouldSendNotification(error)) {
47+
sendSlackNotification(status, error.getHttpStatus(), error.getErrorMessage(), request);
48+
}
49+
} else if (exception instanceof ServletException) {
50+
sendSlackNotification(status, HttpStatus.INTERNAL_SERVER_ERROR, exception.getMessage(), request);
51+
}
52+
}
53+
54+
private void sendSlackNotification(SlackStatus status, HttpStatus statusCode, String errorMessage, HttpServletRequest request) {
55+
slackSender.sendSlackNotification(serverErrorWebUrl,
56+
status.getTitle() + " : " + statusCode,
57+
generateSlackAttachment(status, errorMessage, request));
2758
}
2859

2960
@Override
3061
public Attachment generateSlackAttachment(SlackStatus status, Object... params) {
31-
Exception e = (Exception) params[0];
62+
String errorMessage = (String) params[0];
3263
HttpServletRequest request = (HttpServletRequest) params[1];
33-
3464
String requestTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").format(LocalDateTime.now());
35-
3665
return Attachment.builder()
3766
.color(changeColorToHex(status.getColor()))
38-
.title(requestTime + " 발생 오류 로그")
67+
.text(requestTime + " 발생")
3968
.fields(List.of(
4069
generateSlackField("User Info", "- ID : " + request.getRemoteUser()),
4170
generateSlackField("Request URL", "[" + request.getMethod() + "] " + request.getRequestURI()),
42-
generateSlackField("Error Info", e.getMessage())))
71+
generateSlackField("Error Message", errorMessage)))
4372
.build();
4473
}
4574
}

src/main/java/sopt/org/hmh/domain/slack/builder/NewUserSlackMessageBuilder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class NewUserSlackMessageBuilder implements SlackMessageBuilder{
2323
public void sendNotification(SlackStatus status, String userName, String os) {
2424
slackSender.sendSlackNotification(
2525
newUserWebUrl,
26-
status.getTitle(),
26+
status.getTitle() + " : 회원 수 " + userRepository.count() + "명",
2727
generateSlackAttachment(status, userName, os));
2828
}
2929

@@ -34,10 +34,9 @@ public Attachment generateSlackAttachment(SlackStatus status, Object... params)
3434

3535
return Attachment.builder()
3636
.color(changeColorToHex(status.getColor()))
37-
.title("새로운 유저 '" + userName + "'님이 가입했습니다!")
3837
.fields(List.of(
39-
generateSlackField("총 유저 수", " 👉 " + userRepository.count() + "명"),
40-
generateSlackField("가입한 OS", "👉 " + os)))
38+
generateSlackField("User Name", userName),
39+
generateSlackField("User OS", os)))
4140
.build();
4241
}
4342
}

src/main/java/sopt/org/hmh/domain/slack/constant/SlackStatus.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
@Getter
77
@RequiredArgsConstructor
88
public enum SlackStatus {
9-
NEW_USER_SIGNUP(java.awt.Color.GREEN, "🎉 신규 유저 회원 가입 발생"),
10-
INTERNAL_ERROR(java.awt.Color.ORANGE, "🚨 서버 내부 에러 발생"),
11-
CLIENT_ERROR(java.awt.Color.RED, "😭 서버 오류 발생");
9+
NEW_USER_SIGNUP(java.awt.Color.GREEN, "🎉 신규 유저"),
10+
INTERNAL_ERROR(java.awt.Color.ORANGE, "🚨 서버 내부 에러"),
11+
CLIENT_ERROR(java.awt.Color.RED, "😭 서버 오류");
1212

1313
private final java.awt.Color color;
1414
private final String title;

src/main/java/sopt/org/hmh/domain/user/service/UserService.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
import sopt.org.hmh.domain.auth.exception.AuthException;
1414
import sopt.org.hmh.domain.auth.repository.OnboardingInfoRepository;
1515
import sopt.org.hmh.domain.auth.repository.ProblemRepository;
16-
import sopt.org.hmh.domain.slack.builder.NewUserSlackMessageBuilder;
17-
import sopt.org.hmh.domain.slack.constant.SlackStatus;
1816
import sopt.org.hmh.domain.user.domain.User;
1917
import sopt.org.hmh.domain.user.domain.UserConstants;
2018
import sopt.org.hmh.domain.user.domain.exception.UserError;
@@ -31,7 +29,6 @@ public class UserService {
3129
private final UserRepository userRepository;
3230
private final OnboardingInfoRepository onboardingInfoRepository;
3331
private final ProblemRepository problemRepository;
34-
private final NewUserSlackMessageBuilder newUserSlackMessageBuilder;
3532

3633
@Transactional
3734
public void withdraw(Long userId) {
@@ -59,17 +56,15 @@ public void validateDuplicateUser(String socialId, SocialPlatform socialPlatform
5956
}
6057
}
6158

62-
public User addUser(SocialPlatform socialPlatform, String socialId, String name, String os) {
59+
public User addUser(SocialPlatform socialPlatform, String socialId, String name) {
6360
this.validateDuplicateUser(socialId, socialPlatform);
64-
User user = userRepository.save(
61+
return userRepository.save(
6562
User.builder()
6663
.socialPlatform(socialPlatform)
6764
.socialId(socialId)
6865
.name(validateName(name))
6966
.build()
7067
);
71-
newUserSlackMessageBuilder.sendNotification(SlackStatus.NEW_USER_SIGNUP, name, os);
72-
return user;
7368
}
7469

7570
private String validateName(String name) {

src/main/java/sopt/org/hmh/global/auth/jwt/service/TokenService.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@ public class TokenService {
1717

1818
@Transactional
1919
public ReissueResponse reissueToken(String refreshToken) {
20-
String parsedRefreshToken = extractPrefix(refreshToken);
21-
String userId = jwtProvider.getSubject(parsedRefreshToken);
22-
jwtValidator.validateRefreshToken(parsedRefreshToken);
20+
String userId = jwtProvider.getSubject(refreshToken);
21+
jwtValidator.validateRefreshToken(refreshToken);
2322
return ReissueResponse.of(jwtProvider.issueToken(userId));
2423
}
2524

0 commit comments

Comments
 (0)