본문 바로가기
💻 개발/주문 플랫폼

11/15 - TIL : userDetails에 null이 들어오는 문제

by 컴쏘 2024. 11. 15.

 

오늘도 부지런히 개발을 하던 도중... 🐜 🐜  

 

사용자 인가 로직을 추가하기 위해 userDetails를 통해 사용자 정보를 주입받는 과정에 문제가 발생했다! 

 

분명히 어제 설정한 Postman 토큰 주입 방법으로 토큰을 넘겨주었는데도 JwtAuthorizationFilter에서 인증이 자꾸 실패되었다. 

 

 

확인해보기 위해 다음과 같이 예외 처리하는 코드와 로그를 작성하고 다시 실행시켜보았다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    @ResponseStatus(HttpStatus.CREATED)
    @PostMapping
    public ProductCreateResponse createProduct(
        @PathVariable(value = "shopUuid"String shopUuid,
        @Valid @RequestBody ProductCreateRequest productCreateRequest,
        @AuthenticationPrincipal UserDetailsImpl userDetails
    ) {
        if (userDetails == null) {
            throw new ResponseStatusException(HttpStatus.UNAUTHORIZED);
        }
 
        log.info("user String Id " + userDetails.getUserStringId());
        log.info("user String Role " + userDetails.getRole());
 
        ProductForCreate productForCreate = productCreateRequest.toDomain(
            shopUuid,
            userDetails.getUserStringId(),
            userDetails.getRole()
        );
        Product product = productService.createProduct(productForCreate);
 
        return ProductCreateResponse.from(product);
    }
cs

 

Postman으로 확인해보니 예외처리가 되었다. (null 값인지 확인하는 if문에 걸림)

예외 처리가 되었다..!

 

팀 채널을 통해 담당 API 팀원 분에게 문의를 하니 URL 필터링에 API가 추가가 안되어서라고 하셨다. 

  • URL 기반 필터링을 구성하는데, 인증/인가 로직을 수행하기 위해 필요한 URL들을 정의한 곳에 내가 테스트해보려는 API가 추가가 안된 것 

따라서, URL 필터링을 하는 곳에 나의 API를 추가해주었다. 

  • Path Variable이 UUID이기 때문에 정규 표현식이 필요했다. 
1
2
3
4
5
6
7
8
9
10
11
12
13
    private final static String UUID_PATTERN = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}";
 
    private static final Set<String> FILTERING_URIS_ADMIN = Set.of(
            "/admin"
    );
 
    //필터링할 url 추가하시면 됩니다. (user 정보가 필요하거나 권한이 필요한 url)
    private static final Set<Pattern> FILTERING_URIS = Set.of(
        Pattern.compile("^/api/v1/example$"),
        Pattern.compile("^/api/v1/example2$"),
        Pattern.compile(String.format("^/api/v1/shops/%s/products$", UUID_PATTERN)),
        Pattern.compile(String.format("^/api/v1/shops/%s/products/%s$", UUID_PATTERN, UUID_PATTERN))
    );
cs

 

 

다시 테스트를 해보았다. 

성공!

 

 

나와 같은 문제를 겪고 있는 팀원 분이 계셔서 내 코드를 공유를 해주었다. 

오늘도 공유!