Skip to content

Commit 0a35fef

Browse files
authored
Merge pull request #273 from softeer5th/fix/be/cookie-name
[BE] 학생과 교수의 access token이 겹치는 문제 해결
2 parents c944c96 + fbb80e2 commit 0a35fef

File tree

3 files changed

+56
-21
lines changed

3 files changed

+56
-21
lines changed

back-end/reacton-classroom/src/main/java/com/softeer/reacton_classroom/global/jwt/JwtAuthenticationFilter.java

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
2525

2626
private final JwtTokenUtil jwtTokenUtil;
2727

28-
private static final String TOKEN_COOKIE_NAME = "access_token";
28+
private static final String PROFESSOR_COOKIE_NAME = "access_token";
29+
private static final String STUDENT_COOKIE_NAME = "student_access_token";
30+
2931
private static final String STUDENT_ACCESS_URL = "/sse/connection/student";
3032
private static final List<String> WHITE_LIST_URLS = List.of(
3133
"/sse/message"
@@ -53,11 +55,10 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
5355
}
5456

5557
try {
56-
String token = getJwtFromCookie(request);
57-
jwtTokenUtil.validateToken(token);
58-
5958
if ((isStudentRequest(requestUri))) {
60-
filterStudent(request, token);
59+
filterStudent(request);
60+
} else {
61+
filterProfessor(request);
6162
}
6263

6364
chain.doFilter(request, response);
@@ -66,27 +67,49 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
6667
}
6768
}
6869

69-
private void filterStudent(HttpServletRequest request, String token) {
70+
private void filterStudent(HttpServletRequest request) {
71+
String token = getStudentJwtFromCookie(request);
72+
jwtTokenUtil.validateToken(token);
7073
Map<String, Object> userInfo = jwtTokenUtil.getStudentInfoFromToken(token);
7174

7275
request.setAttribute("studentId", userInfo.get("studentId"));
7376
request.setAttribute("courseId", userInfo.get("courseId"));
7477

75-
log.debug("JWT 검증에 성공했습니다. : studentId = {}", userInfo.get("studentId"));
78+
log.debug("학생 사용자의 JWT 검증에 성공했습니다. : studentId = {}", userInfo.get("studentId"));
79+
}
80+
81+
private void filterProfessor(HttpServletRequest request) {
82+
String token = getProfessorJwtFromCookie(request);
83+
jwtTokenUtil.validateToken(token);
84+
85+
log.debug("교수 사용자의 JWT 검증에 성공했습니다.");
7686
}
7787

7888
private boolean isWhiteListed(String requestUri) {
7989
return WHITE_LIST_URLS.stream().anyMatch(requestUri::startsWith);
8090
}
8191

82-
private String getJwtFromCookie(HttpServletRequest request) {
92+
private String getProfessorJwtFromCookie(HttpServletRequest request) {
93+
if (request.getCookies() == null) {
94+
log.debug("교수 사용자의 쿠키가 존재하지 않습니다.");
95+
return null;
96+
}
97+
98+
return Arrays.stream(request.getCookies())
99+
.filter(cookie -> PROFESSOR_COOKIE_NAME.equals(cookie.getName()))
100+
.map(Cookie::getValue)
101+
.findFirst()
102+
.orElse(null);
103+
}
104+
105+
private String getStudentJwtFromCookie(HttpServletRequest request) {
83106
if (request.getCookies() == null) {
84-
log.debug("쿠키가 존재하지 않습니다.");
107+
log.debug("학생 사용자의 쿠키가 존재하지 않습니다.");
85108
return null;
86109
}
87110

88111
return Arrays.stream(request.getCookies())
89-
.filter(cookie -> TOKEN_COOKIE_NAME.equals(cookie.getName()))
112+
.filter(cookie -> STUDENT_COOKIE_NAME.equals(cookie.getName()))
90113
.map(Cookie::getValue)
91114
.findFirst()
92115
.orElse(null);

back-end/reacton/src/main/java/com/softeer/reacton/domain/course/StudentCourseController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public ResponseEntity<Void> registerCourse(
6767
log.debug("입장 코드와 일치하는 수업 참여를 요청합니다. : accessCode = {}", accessCode);
6868

6969
String newAccessToken = studentCourseService.registerCourse(accessCode);
70-
ResponseCookie jwtCookie = ResponseCookie.from("access_token", newAccessToken)
70+
ResponseCookie jwtCookie = ResponseCookie.from("student_access_token", newAccessToken)
7171
.httpOnly(true)
7272
.secure(true)
7373
.path("/")

back-end/reacton/src/main/java/com/softeer/reacton/global/jwt/JwtAuthenticationFilter.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@
2323
@RequiredArgsConstructor
2424
public class JwtAuthenticationFilter extends OncePerRequestFilter {
2525

26-
// Todo: JWT 토큰 검증을 하지 않아도 되는 페이지에 대해 filter 미적용 기능 추가
27-
2826
private final JwtTokenUtil jwtTokenUtil;
2927

30-
private static final String TOKEN_COOKIE_NAME = "access_token";
28+
private static final String PROFESSOR_COOKIE_NAME = "access_token";
29+
private static final String STUDENT_COOKIE_NAME = "student_access_token";
3130

3231
private static final List<String> WHITE_LIST_URLS = List.of(
3332
"/auth/google/url",
@@ -79,40 +78,53 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
7978
}
8079

8180
private void filterStudent(HttpServletRequest request) {
82-
String token = getJwtFromCookie(request);
81+
String token = getStudentJwtFromCookie(request);
8382
jwtTokenUtil.validateToken(token);
8483
Map<String, Object> userInfo = jwtTokenUtil.getStudentInfoFromToken(token);
8584

8685
request.setAttribute("studentId", userInfo.get("studentId"));
8786
request.setAttribute("courseId", userInfo.get("courseId"));
8887

89-
log.debug("JWT 검증에 성공했습니다. : studentId = {}", userInfo.get("studentId"));
88+
log.debug("학생 사용자의 JWT 검증에 성공했습니다. : studentId = {}", userInfo.get("studentId"));
9089
}
9190

9291
private void filterProfessor(HttpServletRequest request) {
93-
String token = getJwtFromCookie(request);
92+
String token = getProfessorJwtFromCookie(request);
9493
jwtTokenUtil.validateToken(token);
9594
Map<String, Object> userInfo = jwtTokenUtil.getProfessorInfoFromToken(token);
9695

9796
request.setAttribute("oauthId", userInfo.get("oauthId"));
9897
request.setAttribute("email", userInfo.get("email"));
9998
request.setAttribute("isSignedUp", userInfo.get("isSignedUp"));
10099

101-
log.debug("JWT 검증에 성공했습니다. : email = {}", userInfo.get("email"));
100+
log.debug("교수 사용자의 JWT 검증에 성공했습니다. : email = {}", userInfo.get("email"));
102101
}
103102

104103
private boolean isWhiteListed(String requestUri) {
105104
return WHITE_LIST_URLS.stream().anyMatch(requestUri::startsWith);
106105
}
107106

108-
private String getJwtFromCookie(HttpServletRequest request) {
107+
private String getProfessorJwtFromCookie(HttpServletRequest request) {
108+
if (request.getCookies() == null) {
109+
log.debug("교수 사용자의 쿠키가 존재하지 않습니다.");
110+
return null;
111+
}
112+
113+
return Arrays.stream(request.getCookies())
114+
.filter(cookie -> PROFESSOR_COOKIE_NAME.equals(cookie.getName()))
115+
.map(Cookie::getValue)
116+
.findFirst()
117+
.orElse(null);
118+
}
119+
120+
private String getStudentJwtFromCookie(HttpServletRequest request) {
109121
if (request.getCookies() == null) {
110-
log.debug("쿠키가 존재하지 않습니다.");
122+
log.debug("학생 사용자의 쿠키가 존재하지 않습니다.");
111123
return null;
112124
}
113125

114126
return Arrays.stream(request.getCookies())
115-
.filter(cookie -> TOKEN_COOKIE_NAME.equals(cookie.getName()))
127+
.filter(cookie -> STUDENT_COOKIE_NAME.equals(cookie.getName()))
116128
.map(Cookie::getValue)
117129
.findFirst()
118130
.orElse(null);

0 commit comments

Comments
 (0)