Skip to content

Commit ede072d

Browse files
committed
feat(step3) : 3단계 - 관리자 기능
1 parent 22e2cf4 commit ede072d

File tree

12 files changed

+280
-553
lines changed

12 files changed

+280
-553
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package roomescape.auth;
2+
3+
import jakarta.servlet.http.Cookie;
4+
import jakarta.servlet.http.HttpServletRequest;
5+
import jakarta.servlet.http.HttpServletResponse;
6+
import org.springframework.web.servlet.HandlerInterceptor;
7+
import roomescape.domain.Member;
8+
import roomescape.domain.MemberRepository;
9+
import roomescape.util.JwtUtil;
10+
11+
import java.util.Arrays;
12+
import java.util.Optional;
13+
14+
public class AdminInterceptor implements HandlerInterceptor {
15+
16+
private final JwtUtil jwtUtil;
17+
private final MemberRepository memberRepository;
18+
19+
public AdminInterceptor(JwtUtil jwtUtil, MemberRepository memberRepository) {
20+
this.jwtUtil = jwtUtil;
21+
this.memberRepository = memberRepository;
22+
}
23+
24+
@Override
25+
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
26+
Optional<String> token = extractToken(request.getCookies());
27+
if (token.isEmpty()) {
28+
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
29+
return false;
30+
}
31+
32+
Long memberId = jwtUtil.getMemberIdFromToken(token.get());
33+
Optional<Member> member = memberRepository.findById(memberId);
34+
35+
if (member.isEmpty() || !"ADMIN".equals(member.get().getRole())) {
36+
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
37+
return false;
38+
}
39+
40+
return true;
41+
}
42+
43+
private Optional<String> extractToken(Cookie[] cookies) {
44+
if (cookies == null) {
45+
return Optional.empty();
46+
}
47+
return Arrays.stream(cookies)
48+
.filter(cookie -> "token".equals(cookie.getName()))
49+
.map(Cookie::getValue)
50+
.findFirst();
51+
}
52+
}

src/main/java/roomescape/util/LoginMemberArgumentResolver.java renamed to src/main/java/roomescape/auth/LoginMemberArgumentResolver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package roomescape.util;
1+
package roomescape.auth;
22

33
import jakarta.servlet.http.Cookie;
44
import jakarta.servlet.http.HttpServletRequest;
@@ -10,6 +10,7 @@
1010
import roomescape.domain.Member;
1111
import roomescape.domain.MemberRepository;
1212
import roomescape.dto.LoginMember;
13+
import roomescape.util.JwtUtil;
1314

1415
import java.util.Arrays;
1516
import java.util.Optional;

src/main/java/roomescape/config/WebConfig.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import org.springframework.context.annotation.Configuration;
44
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
5+
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
56
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
6-
import roomescape.util.LoginMemberArgumentResolver;
77
import roomescape.domain.MemberRepository;
8+
import roomescape.auth.AdminInterceptor;
89
import roomescape.util.JwtUtil;
10+
import roomescape.auth.LoginMemberArgumentResolver;
911

1012
import java.util.List;
1113

@@ -24,4 +26,10 @@ public WebConfig(JwtUtil jwtUtil, MemberRepository memberRepository) {
2426
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
2527
resolvers.add(new LoginMemberArgumentResolver(jwtUtil, memberRepository));
2628
}
29+
30+
@Override
31+
public void addInterceptors(InterceptorRegistry registry) {
32+
registry.addInterceptor(new AdminInterceptor(jwtUtil, memberRepository))
33+
.addPathPatterns("/admin/**");
34+
}
2735
}

src/main/java/roomescape/controller/PageController.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,14 @@ public String reservationPage() {
2020
public String timePage() {
2121
return "time";
2222
}
23+
24+
@GetMapping("/login")
25+
public String loginPage() {
26+
return "login";
27+
}
28+
29+
@GetMapping("/admin")
30+
public String adminPage() {
31+
return "admin";
32+
}
2333
}

src/main/resources/schema.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ CREATE TABLE member (
2323
);
2424

2525
INSERT INTO member (email, password, name, role) VALUES ('admin@email.com', 'password', '어드민', 'ADMIN');
26+
INSERT INTO member (email, password, name, role) VALUES ('brown@email.com', 'password', '브라운', 'USER');

src/main/resources/static/js/new-reservation.js

Lines changed: 0 additions & 212 deletions
This file was deleted.

0 commit comments

Comments
 (0)