로그인을 학습하기 전 회원가입 로직을 간단하게 만들었습니다.
먼저, 회원가입시 입력한 비밀번호를 암호화 하기위해 BCryptPasswordEncoder 를 추가해줍니다.
package com.choigoyo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@SpringBootApplication
public class JwtApplication {
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
public static void main(String[] args) {
SpringApplication.run(JwtApplication.class, args);
}
}
회원정보를 DB에 저장하기위해 UserRepository를 @Autowired 하고,
비밀번호를 DB에 저장시 보안을 위해 BCryptPasswordEncoder 를 @Autowired 합니다.
/join 요청이 들어왔을 때 처리를 위해 PostMapping타입으로 컨트롤러를 간단하게 합니다.
package com.choigoyo.controller;
import com.choigoyo.entity.UserEntityJWT;
import com.choigoyo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RestApiController {
@Autowired
private UserRepository userRepository;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@GetMapping("/")
public String home(){
return "<h1>HOME</h1>";
}
@PostMapping("/token") // 토큰 테스트를 위해 임시 컨트롤러 생성
public String token(){
return "<h1>TOKEN</h1>";
}
@PostMapping("join")
public String join(@RequestBody UserEntityJWT userEntityJWT) {
userEntityJWT.setPassword(bCryptPasswordEncoder.encode(userEntityJWT.getPassword())); // 비밀번호 암호화
userEntityJWT.setRole("user"); // 회원가입 기본 역할 세팅
userRepository.save(userEntityJWT);
return "회원가입이 완료되었습니다.";
}
}
json형식으로 각 값을 보내 컨트롤러가 정상 작동하여 회원가입이 완료되었다는 print문이 출력되었습니다.
저장된 값을 확인해 보면 회원정보가 저장되면서 id 값은 자동으로 값이 부여되었고
비밀번호는 입력한 값이 노출되지 않도록 암호화가 잘 되어있습니다
role은 컨트롤러에서 기본적으로 user 로 값을 주었습니다.
userName값에도 입력한 값이 정상적으로 저장된 것을 확인할 수 있었습니다.