본문 바로가기
Spring/SpringSecurity

[SpringSecurity] SpringSecurity + JWT 로그인 구현_3

by 코딩맛 2024. 3. 16.

 

해당 글은 Spring으로 구현한 프로젝트를 SpringBoot로 리팩토링 하는 과정을 담은 글입니다.

- Index -

[SpringSecurity] SpringSecurity + JWT 로그인 구현_1
[SpringSecurity] SpringSecurity + JWT 로그인 구현_2
[SpringSecurity] SpringSecurity + JWT 로그인 구현_3
[SpringSecurity] SpringSecurity + JWT 회원가입, 테스트 코드 작성
[번외]JwtAuthorizationFilter에서 상속받을 필터에 대한 고민

 

Postman을 사용하여 로그인 기능이 작동되는지 확인한다.

 

1. DB에 회원 정보 확인

MEMBER, MEMBER_ROLES 테이블

 

2. controller에 요청 보낼 SignInDto 구현

@Getter
@Setter
@ToString
@NoArgsConstructor
public class SignInDto {
    private String username;
    private String password;
}

 

3. MemberController 구현

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/members")
public class MemberController {

    private final MemberService memberService;

    @PostMapping("/sign-in")
    public JwtToken signIn(@RequestBody SignInDto signInDto) {
        String username = signInDto.getUsername();
        String password = signInDto.getPassword();
        JwtToken jwtToken = memberService.signIn(username, password);
        log.info("request username = {}, password = {}", username, password);
        log.info("jwtToken accessToken = {}, refreshToken = {}", jwtToken.getAccessToken(), jwtToken.getRefreshToken());
        return jwtToken;
    }

    @PostMapping("/test")
    public String test() {

        return SecurityUtil.getCurrentUsername();
    }

}

members/sign-in  : 모든 사용자에게 허용한다.

members/test : USER 권한이 있는 사용자만 접근이 가능하다.

 

 

4. 테스트 과정

1. DB에 저장된 MEMBER 테이블 속 username, password를 body에 json 형태로 담아 members/sign-in에 요청한다.

2. 서버에서 JWT 토큰을 발급한다.

3. JWT 코튼에서 Access Token을 header에 넣어서 members/test에 요청한다.

 

4-1,2. Postman으로 member/sign-in에 요청

해당 회원이 정상적으로 인증되어 Jwt 토큰을 반환한다.

grantType(토큰인증타입), accesToken, refreshToken을 발급한다.

 

4-3. 발급받은 Access Token으로 test API 호출

member/test로 요청 허용을 위해선 roles에 USER가 포함되어 있어야 함.(DB MEMBER_ROLES 테이블 roles에 USER 저장)

서버로 부터 발급 받은 Acess Token을 Header의 키와 값 형태로 Authorization 와 Bearer[Access Token] 로 요청을 보낸다.

 

요청 결과는 success로 인가 허용이 된다.

 

 

참고 블로그

https://suddiyo.tistory.com/entry/Spring-Spring-Security-JWT-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-3

 

[Spring] Spring Security + JWT 로그인 구현하기 - 3

📝 지난 포스팅 ➡︎ Spring Security + JWT 로그인 구현하기 - 2 [Spring] Spring Security + JWT 로그인 구현하기 - 2 Spring Security + JWT 로그인 구현 1️⃣ 라이브러리 설정 Spring Security와 JWT를 사용하기 위해 다

suddiyo.tistory.com