이번 시간에는 Spring Security를 활용하여 로그인 페이지를 구현하고
회원가입하는것을 해보려고한다.
@GetMapping("/loginForm")
public String loginForm(){
return "loginForm";
}
@GetMapping("/joinForm")
public String joinForm(){
return "joinForm";
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>로그인 페이지</title>
</head>
<body>
<h1>로그인 페이지</h1>
<hr/>
<form>
<input type="text" name = "username" placeholder="Username"/><br/>
<input type="password" name = "password" placeholder="Password"/><br/>
<button>로그인</button>
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<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>
다음과 같이 회원가입 페이지가 나오게 되었다!!
이제 회원가입을 하기 위해 User Entity/Repository를 생성하고
Controller를 수정해보자
package com.cos.securiy1.model;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.sql.Timestamp;
@Entity
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String username;
private String password;
private String email;
private String role;
@CreationTimestamp
private Timestamp createDate;
}
id 를 PK 로 설정하고
이름,패스워드,이메일,role,생성시간을 갖도록 하였다.
다음과 같이하면 db에 user table이 생성될 것이다.(db와 연결을 잘 했다면..)
userRepository는 Jpa를 이용하여 간단하게 구현하였다.
Jpa는 기본 CRUD함수를 모두 가지고있으며 어노테이션없이 IoC가 된다.
@Autowired
private UserRepository userRepository;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@PostMapping("/join")
public String join(User user){
user.setRole("ROLE_USER");
String rawPassword = user.getPassword();
String encPassword = bCryptPasswordEncoder.encode(rawPassword);
user.setPassword(encPassword);
userRepository.save(user); // 회원가입이 잘 됨. 비밀번호 => 1234 => 시큐리티로 로그인이 되지 않는다. 패스워드 암호화필요
return "redirect:/loginForm";
}