[Spring Security] 3. Spring Security 회원가입

개발자·2022년 4월 30일
0

Spring Security

목록 보기
3/11
post-thumbnail

로그인, 회원가입 구현

이번 시간에는 Spring Security를 활용하여 로그인 페이지를 구현하고
회원가입하는것을 해보려고한다.

controller/IndexController.java

    @GetMapping("/loginForm")
    public String loginForm(){
        return "loginForm";
    }

    @GetMapping("/joinForm")
    public String joinForm(){
        return "joinForm";
    }
  • 다음과 같이 로그인/회원가입 폼으로 이동하도록 컨트롤러를 설정한다.
  • 이제 Html 파일을 임시로 만들어 확인하여본다.

templates/loginForm.html

<!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>
  • 다음과 같이 폼태그를 활용하여 로그인페이지를 먼저 만들어 주었다.

  • 이제 회원가입 페이지를 구현해 보자.

templates/joinForm.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를 수정해보자

model/User.java

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가 된다.

controller/IndexController.java 수정

    @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";
    }
  • 다음과 같이 @Autowired 어노테이션을 이용하여 빈을 찾아 등록하고
    User에게 입력하지 않은 Role을 설정한뒤, 비밀번호가 그대로 나오는것을 방지하기 위해 암호화하여 저장하도록 한다.

  • DB에 다음과 같이 저장되면 성공!

0개의 댓글