Spring Security/security
[SpringBoot + Security + JWT + JPA ] 회원가입 , 로그인 구현하기-4
데이25
2023. 2. 1. 20:18
이제 시큐리티 설정 및 JWT 토큰 발행과 구현은 모두 끝났다.
이번 포스트에서는 테스트를 위한 controller와 service를 만들고 postman을 통해 테스트해보도록 하겠다.
service 패키지를 만들고, MemberService.java클래스를 만든다.
그리고 web패키지 아래에 dto 패키지를 만들고 MemberSaveRequestDto와 MemberRequestDto를 만든다.
MemberSaveRequsetDto.java
@Getter
@NoArgsConstructor
public class MemberSaveRequestDto {
private String email;
@Setter
private String password;
public Member toEntity() {
return Member.builder()
.email(email)
.password(password)
.roles(Collections.singletonList("ROLE_USER"))
.build();
}
}
회원가입시 사용자 email과 password를 전달하는 dto 이다.
테스트 용 이므로 우선 회원가입 대상자는 role 이 User가 되도록 설정한다.
MemberRequestDto.java
@Getter
@NoArgsConstructor
public class MemberRequestDto {
private String email;
private String password;
}
로그인 시 회원 email과 password를 전달하는 dto 이다.
MemberService.java
@RequiredArgsConstructor
@Service
public class MemberService {
private final MemberRepository memberRepository;
private final BCryptPasswordEncoder passwordEncoder;
private final JwtTokenProvider jwtTokenProvider;
public String join(MemberSaveRequestDto requestDto) {
requestDto.setPassword(passwordEncoder.encode(requestDto.getPassword()));
memberRepository.save(requestDto.toEntity());
return requestDto.getEmail();
}
public String login(MemberRequestDto requestDto) {
Member member = memberRepository.findByEmail(requestDto.getEmail())
.orElseThrow(() -> new IllegalArgumentException("가입되지 않은 email 입니다."));
if (!passwordEncoder.matches(requestDto.getPassword(), member.getPassword())) {
throw new IllegalArgumentException("잘못된 비밀번호 입니다.");
}
return jwtTokenProvider.generateToken(member.getEmail(), "USER");
}
}
IndexController.java
@RequiredArgsConstructor
@RestController
public class IndexController {
private final MemberService memberService;
@GetMapping("/index")
public String hello() {
return "hello world";
}
@PostMapping("/join")
public String join(@RequestBody MemberSaveRequestDto requestDto) {
System.out.println(requestDto.getPassword() + " , " + requestDto.getEmail());
return memberService.join(requestDto);
}
@PostMapping("/login")
public String login(@RequestBody MemberRequestDto requestDto) {
return memberService.login(requestDto);
}
@GetMapping("/token/test")
public String test() {
return "test success";
}
}
스프링부트를 실행하고 포스트맨에서 테스트 해본다.
1. 회원가입
2. 로그인
3. 토큰 가지고 로그인유저만 접근가능한 리소스에 접근
3-1. Header에 로그인 후 리턴된 토큰 붙여넣기
3-2. localhost:8080/token/test 접속
감사합니다.