<회원가입 폼>
회원가입 버튼을 누르면 /join으로 post 요청이 가게 된다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 페이지</title>
</head>
<body>
<h1>회원가입 페이지</h1>
<hr/>
<form action="/join" method="post">
<input type="text" name="username" placeholder="Username"/> <br/>
<input type="password" name="password" placeholder="Password"/> <br/>
<input type="email" name="email" placeholder="Email"/> <br/>
<button>회원가입</button>
</form>
</body>
</html>
</join 컨트롤러 초안>
@PostMapping("/join")
public @ResponseBody String join(User user){ // 메소드에서 반환되는 값을 HTTP 응답 본문에 직접 쓰도록 지시
System.out.println(user);
user.setRole("ROLE_USER");
userRepository.save(user);
return "join"; //@ResponseBody : 반환값인 join이 http response 응답 본문에 쓰이도록 지시한다. 즉, join이 뷰 이름이 아니라 응답 데이터임을 나타냄
}
- role을 set해준 후 바로 레포지토리에 저장하게 되면 회원가입은 잘된다. But, 시큐리티로 로그인이 불가!!
- 패스워드가 암호화되지 않았기 때문에!
-> 따라서 시큐리티로 로그인하기 위해 패스워드를 암호화해서 저장해야 한다
<패스워드 암호화하기>
1) Security Config에 BCryptPasswordEncoder를 Bean으로 등록
@Configuration
@EnableWebSecurity // 스프링 시큐리티 필터가 스프링 필터체인에 등록된다
public class SecurityConfig {
// @Bean으로 등록해주면 해당 메서드의 리턴되는 오브젝트를 IoC로 등록해준다 -> 아무데서나 쓸 수 있게됨
@Bean
public BCryptPasswordEncoder encodePwd(){
return new BCryptPasswordEncoder();
}
@Bean을 이용해 빈으로 등록해주면 해당 메서드의 리턴되는 오브젝트를 IoC로 등록해준다 -> 아무데서나 쓸 수 있게됨
2) 사용자의 rawPassword를 암호화된 encPassword로 바꿔 저장하기
@PostMapping("/join")
public String join(User user){ // 메소드에서 반환되는 값을 HTTP 응답 본문에 직접 쓰도록 지시
System.out.println(user);
user.setRole("ROLE_USER");
String rawPassword=user.getPassword();
String encPassword=bCryptPasswordEncoder.encode(rawPassword);
user.setPassword(encPassword);
userRepository.save(user); //회원가입은 잘 됨. 비밀번호 1234 -> 시큐리티로 로그인 할 수 없다. 패스워드가 암호화가 안되었기 때문!
return "redierect:/loginForm";
}
3) 확인
mysql workbench에서 user 테이블 조회결과 잘 저장되었음을 확인할 수 있다
'백 > spring boot' 카테고리의 다른 글
spring security 강의 - Filter + jwt 임시토큰 만들어서 테스트 해보기 (0) | 2024.08.04 |
---|---|
spring security강의 - 로그인 (0) | 2024.07.31 |
스프링부트 배포자동화 (Github actions, AWS ec2, Code deploy, S3) (0) | 2024.07.08 |
@PostMapping vs @PutMapping (0) | 2024.07.06 |
지연로딩 관련 오류 (0) | 2024.06.28 |