Skip to content

Commit 244f408

Browse files
Merge branch 'develop' into CLAP-256-팀-작업-현황-에러-재수정
2 parents 9605488 + 5e4ec57 commit 244f408

File tree

101 files changed

+808
-221
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

101 files changed

+808
-221
lines changed

src/main/java/clap/server/adapter/inbound/security/SecurityConfig.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@ public SecurityFilterChain defaultFilterChain(HttpSecurity http) throws Exceptio
5757
.authorizeHttpRequests(
5858
auth ->
5959
defaultAuthorizeHttpRequest(auth)
60-
.requestMatchers(SWAGGER_ENDPOINTS).permitAll()
61-
.requestMatchers(LOGIN_ENDPOINT).permitAll()
6260
.anyRequest().authenticated()
6361
).build();
6462
}
@@ -83,8 +81,10 @@ private AbstractRequestMatcherRegistry<AuthorizeHttpRequestsConfigurer<HttpSecur
8381
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
8482
.requestMatchers(HttpMethod.OPTIONS, "*").permitAll()
8583
.requestMatchers(HttpMethod.GET, READ_ONLY_PUBLIC_ENDPOINTS).permitAll()
84+
.requestMatchers(SWAGGER_ENDPOINTS).permitAll()
85+
.requestMatchers(LOGIN_ENDPOINT).permitAll()
8686
.requestMatchers(HEALTH_CHECK_ENDPOINT).permitAll()
87-
.requestMatchers(REISSUANCE_ENDPOINTS).permitAll()
87+
.requestMatchers(REISSUANCE_ENDPOINT).permitAll()
8888
.requestMatchers(SWAGGER_ENDPOINTS).permitAll();
8989
}
9090

src/main/java/clap/server/adapter/inbound/security/WebSecurityUrl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ private WebSecurityUrl() {
1212
"/swagger/api-docs/**", "/swagger/v3/api-docs/**",
1313
"/swagger-ui/**", "/swagger"
1414
};
15-
public static final String REISSUANCE_ENDPOINTS = "/api/auths/reissuance";
16-
public static final String[] PUBLIC_ENDPOINTS = {LOGIN_ENDPOINT, REISSUANCE_ENDPOINTS};
15+
public static final String REISSUANCE_ENDPOINT = "/api/auths/reissuance";
1716
public static final String TEMPORARY_TOKEN_ALLOWED_ENDPOINT = "/api/members/initial-password";
1817
}

src/main/java/clap/server/adapter/inbound/security/filter/JwtAuthenticationFilter.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
import clap.server.adapter.outbound.jwt.JwtClaims;
44
import clap.server.adapter.outbound.jwt.access.AccessTokenClaimKeys;
5-
import clap.server.application.port.outbound.auth.ForbiddenTokenPort;
5+
import clap.server.application.port.outbound.auth.forbidden.ForbiddenTokenPort;
66
import clap.server.application.port.outbound.auth.JwtProvider;
7-
import clap.server.exception.AuthException;
87
import clap.server.exception.JwtException;
98
import clap.server.exception.code.AuthErrorCode;
109
import io.jsonwebtoken.Claims;
@@ -24,11 +23,13 @@
2423
import org.springframework.security.web.access.AccessDeniedHandler;
2524
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
2625
import org.springframework.stereotype.Component;
26+
import org.springframework.util.AntPathMatcher;
2727
import org.springframework.util.StringUtils;
2828
import org.springframework.web.filter.OncePerRequestFilter;
2929

3030
import java.io.IOException;
3131
import java.util.Arrays;
32+
import java.util.stream.Stream;
3233

3334
import static clap.server.adapter.inbound.security.WebSecurityUrl.*;
3435

@@ -42,13 +43,22 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
4243
private final AccessDeniedHandler accessDeniedHandler;
4344
private final ForbiddenTokenPort forbiddenTokenPort;
4445

46+
public static final String[] PUBLIC_ENDPOINTS = Stream.of(
47+
HEALTH_CHECK_ENDPOINT,
48+
READ_ONLY_PUBLIC_ENDPOINTS,
49+
SWAGGER_ENDPOINTS
50+
).flatMap(Arrays::stream).toArray(String[]::new);
51+
52+
public static final String[] ANONYMOUS_ENDPOINTS = {LOGIN_ENDPOINT, REISSUANCE_ENDPOINT};
53+
4554
@Override
4655
protected void doFilterInternal(
4756
@NotNull HttpServletRequest request,
4857
@NotNull HttpServletResponse response,
4958
@NotNull FilterChain filterChain
5059
) throws ServletException, IOException {
5160
try {
61+
5262
if (isAnonymousRequest(request)) {
5363
filterChain.doFilter(request, response);
5464
return;
@@ -66,10 +76,19 @@ protected void doFilterInternal(
6676
}
6777

6878
private boolean isAnonymousRequest(HttpServletRequest request) {
69-
String accessToken = request.getHeader(HttpHeaders.AUTHORIZATION);
70-
return accessToken == null;
79+
boolean isAnonymousURI = Arrays.stream(ANONYMOUS_ENDPOINTS)
80+
.anyMatch(endpoint -> new AntPathMatcher().match(endpoint, request.getRequestURI()));
81+
boolean isAnonymous = request.getHeader(HttpHeaders.AUTHORIZATION) == null;
82+
return isAnonymousURI && isAnonymous;
7183
}
7284

85+
@Override
86+
protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
87+
return Arrays.stream(PUBLIC_ENDPOINTS)
88+
.anyMatch(endpoint -> new AntPathMatcher().match(endpoint, request.getRequestURI()));
89+
}
90+
91+
7392
private String resolveAccessToken(
7493
HttpServletRequest request
7594
) throws ServletException {
@@ -106,6 +125,8 @@ private String resolveAccessToken(
106125
}
107126

108127

128+
129+
109130
private boolean isTemporaryTokenAllowed(String requestUrl) {
110131
return requestUrl.equals(TEMPORARY_TOKEN_ALLOWED_ENDPOINT);
111132
}

src/main/java/clap/server/adapter/inbound/web/admin/AddCategoryController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import org.springframework.web.bind.annotation.RequestBody;
1717
import org.springframework.web.bind.annotation.RequestMapping;
1818

19-
@Tag(name = "05. Admin")
19+
@Tag(name = "05. Admin [작업 관리]")
2020
@WebAdapter
2121
@RequiredArgsConstructor
2222
@RequestMapping("/api/managements")

src/main/java/clap/server/adapter/inbound/web/admin/DeleteCategoryController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import org.springframework.web.bind.annotation.PathVariable;
1313
import org.springframework.web.bind.annotation.RequestMapping;
1414

15-
@Tag(name = "05. Admin")
15+
@Tag(name = "05. Admin [작업 관리]")
1616
@WebAdapter
1717
@RequiredArgsConstructor
1818
@RequestMapping("/api/managements")

src/main/java/clap/server/adapter/inbound/web/admin/DeleteMemberController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import org.springframework.web.bind.annotation.RequestBody;
1515
import org.springframework.web.bind.annotation.RequestMapping;
1616

17-
@Tag(name = "05. Admin")
17+
@Tag(name = "05. Admin [회원 관리]")
1818
@WebAdapter
1919
@RequiredArgsConstructor
2020
@RequestMapping("/api/managements")

src/main/java/clap/server/adapter/inbound/web/admin/FindDepartmentController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import java.util.List;
1515

16-
@Tag(name = "05. Admin")
16+
@Tag(name = "05. Admin [회원 관리]")
1717
@WebAdapter
1818
@RequiredArgsConstructor
1919
@RequestMapping("/api/managements")

src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import clap.server.adapter.inbound.web.dto.common.PageResponse;
66
import clap.server.application.port.inbound.admin.FindMembersWithFilterUsecase;
77

8+
import clap.server.common.annotation.architecture.WebAdapter;
89
import io.swagger.v3.oas.annotations.Operation;
910
import io.swagger.v3.oas.annotations.Parameter;
1011
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -16,7 +17,8 @@
1617
import org.springframework.security.access.annotation.Secured;
1718
import org.springframework.web.bind.annotation.*;
1819

19-
@RestController
20+
@Tag(name = "05. Admin [회원 관리]")
21+
@WebAdapter
2022
@RequestMapping("/api/managements")
2123
@RequiredArgsConstructor
2224
public class FindMemberController {

src/main/java/clap/server/adapter/inbound/web/admin/ManageMemberController.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,41 @@
22

33
import clap.server.adapter.inbound.security.service.SecurityUserDetails;
44
import clap.server.adapter.inbound.web.dto.admin.request.UpdateMemberRequest;
5+
import clap.server.adapter.inbound.web.dto.admin.response.MemberDetailsResponse;
6+
import clap.server.application.port.inbound.admin.MemberDetailUsecase;
57
import clap.server.application.port.inbound.admin.UpdateMemberUsecase;
68
import clap.server.common.annotation.architecture.WebAdapter;
79
import io.swagger.v3.oas.annotations.Operation;
810
import io.swagger.v3.oas.annotations.tags.Tag;
911
import jakarta.validation.Valid;
1012
import lombok.RequiredArgsConstructor;
13+
import org.springframework.http.ResponseEntity;
1114
import org.springframework.security.access.annotation.Secured;
1215
import org.springframework.security.core.annotation.AuthenticationPrincipal;
13-
import org.springframework.web.bind.annotation.PathVariable;
14-
import org.springframework.web.bind.annotation.PostMapping;
15-
import org.springframework.web.bind.annotation.RequestBody;
16-
import org.springframework.web.bind.annotation.RequestMapping;
16+
import org.springframework.web.bind.annotation.*;
1717

18-
@Tag(name = "05. Admin")
18+
@Tag(name = "05. Admin [회원 관리]")
1919
@WebAdapter
2020
@RequiredArgsConstructor
2121
@RequestMapping("/api/managements/members")
2222
public class ManageMemberController {
2323
private final UpdateMemberUsecase updateMemberUsecase;
24+
private final MemberDetailUsecase memberDetailUsecase;
2425

2526
@Operation(summary = "회원 정보 수정 API")
2627
@PostMapping("/{memberId}")
2728
@Secured("ROLE_ADMIN")
2829
public void registerMember(@AuthenticationPrincipal SecurityUserDetails userInfo,
2930
@PathVariable Long memberId,
30-
@RequestBody @Valid UpdateMemberRequest request){
31+
@RequestBody @Valid UpdateMemberRequest request) {
3132
updateMemberUsecase.updateMemberInfo(userInfo.getUserId(), memberId, request);
3233
}
34+
35+
@Operation(summary = "회원 상세 정보 조회 API")
36+
@GetMapping("/{memberId}/details")
37+
@Secured("ROLE_ADMIN")
38+
public ResponseEntity<MemberDetailsResponse> getMemberDetail(@AuthenticationPrincipal SecurityUserDetails userInfo,
39+
@PathVariable Long memberId) {
40+
return ResponseEntity.ok(memberDetailUsecase.getMemberDetail(memberId));
41+
}
3342
}

src/main/java/clap/server/adapter/inbound/web/admin/ManagementLabelController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1818
import org.springframework.web.bind.annotation.*;
1919

20-
@Tag(name = "05. Admin")
20+
@Tag(name = "05. Admin [작업 관리]")
2121
@WebAdapter
2222
@RequiredArgsConstructor
2323
@RequestMapping("/api/managements/labels")

0 commit comments

Comments
 (0)