프로젝트/WALFI

[WALFI] BE/FE - Token으로 유저 정보 가져오기/ Reqct-query Cache 사용

코딩하는 공대생 2024. 8. 13. 15:17
반응형

1. Back-End (JavaSpringBoot)

 

table column 

여기서 user_id, email, name, birth_date, phone_number, 대표 계좌를 보내는 API를 만들거다. 

Domain 

 

이미 사용되고 있는 Entity 이기 때문에 기존에 작성되어 있던 UserDomain을 사용한다 '-^b

 

Repository

 

userId로 정보를 받아오는 findI()를 작성한다. 

    @Query(value = "select * from user where user_id = ?1", nativeQuery = true)
    User find(String userId);

 

 

Dto

 

userDto 변경없이 사용 ~.~

 

Service 추가

 

uerId로 user정보를 찾기. findById라는 걸 그냥 지원하는건가? 

package com.shinhan.walfi.service;

import com.shinhan.walfi.domain.User;
import com.shinhan.walfi.dto.TokenDto;
import com.shinhan.walfi.dto.UserDto;

import java.util.List;

public interface UserService {

	...


    UserDto findUserById(String userId);
}
Controller

 

다행히 기존에 짜놓은 코드 중에 token으로 어떤 정보를 가져오는 부분이 있었고, 이 부분을 참고했다.

   @PostMapping("/getinfo")
    @ApiOperation(value = "아이디에 해당하는 유저의 게임 정보를 가져오는 기능")
    public ResponseEntity<HttpResult> getUserGameInfo(@ApiIgnore @AuthenticationPrincipal User user){
        UserGameInfoDto userGameInfoDto = userGameInfoService.getUserGameInfo(user.getUserId());

        HttpResult res;
        res = HttpResult.getSuccess();
        res.setData(userGameInfoDto);

        return ResponseEntity.status(res.getStatus()).body(res);
    }

 

1. Post 타입으로 받으며, Token으로 확인한다. 

@ApiIgnore : Swagger에서 파라미터를 확인하지 못하도록 함. 

@AuthenticationPricipal : Spring Security 3.2부터 Custom 로그인 객체를 가져올 수 있게 함. 

  • JWT는 Token id + password + 특정 숫자 값을 확인하고, 확인된 Authentication 객체를  SecurityContext에 저장한다. @AuthenticationPricipla은 이 SecurityContextHolder에 저장된 인증 객체의 principal을 가져와 사용하는 것.

2. 받아온 DB 정보를 Dto 형태로 변경하고, HttpResult 세팅 후 return 

  @ApiOperation(value = "유저 정보 조회")
    @PostMapping("/userinfo")
    public ResponseEntity<HttpResult> getUserInfo(@ApiIgnore @AuthenticationPrincipal User user){
        UserDto userInfo = userService.findUserById(user.getUserId());

        HttpResult res;
        res = HttpResult.getSuccess();
        res.setData(userInfo);

        return ResponseEntity.status(res.getStatus()).body(res);

    }

 

잘 도착하는 모습 ^_^

 

 


 

2. Front-End (Next, React-Query)

홈에서 정보를 받아와서 해야 하는 부분은 총 4부분이다. 현재 symentic-markup 으로 한다고 부분 부분 쪼개서 넣어놨고 전역 상태 관리 라이브러리 ( redux, recoil) 이 빠져 있는 상태기 때문에, 두가지 방법이 있는데, 캐시로 진행하려 한다. props는 쫌 ^.^

 

1) 상위 컴포넌트에서 props로 전달

2) 하위 컴포넌트에서 따로 reactquery cache 받아오기 

 

 

 

 

 

 

 

 

 

https://wildeveloperetrain.tistory.com/324

 

@AuthenticationPrincipal 동작 원리와 사용 예시

Spring Security @AuthenticationPrincipal 동작 원리와 사용 예시 해당 포스팅은 스프링 시큐리티 환경에서 인증 후 로그인 객체를 가져오는 방법 중 '@AuthenticationPrincipal 어노테이션을 사용하는 방법과 동

wildeveloperetrain.tistory.com

https://itvillage.tistory.com/60

 

JWT 자격 검증 시, SecurityContext는 언제 비워(clear)질까?

클라이언트 쪽에서 전송한 username과 password에 대한 인증을 처리하는 JwtAuthenticationFilter(UsernamePassworAuthenticationFilter를 확장)에서 로그인 인증에 성공한 뒤, JWT를 클라이언트 쪽에 응답으로 전달했

itvillage.tistory.com

 

반응형