Springboot - Security (3) 시큐리티 회원가입

Yuri Lee·2020년 9월 17일
1

Springboot - Security

목록 보기
3/8

1. 로그인 페이지 만들기

2. user model 만들기

model 패키지 만들고 User.java 파일 만들기
user table을 만들어줌

User.java

package com.yuri.security1.model;

import java.sql.Timestamp;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.CreationTimestamp;

import lombok.Data;

@Entity
@Data
public class User {
	
	@Id // primary key
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private String username;
	private String password;
	private String email;
	private String role; //ROLE_USER, ROLE_ADMIN
	
	@CreationTimestamp
	private Timestamp createDate;

}

security db를 새로고침하면 user table이 생겼음을 확인할 수 있다 😙😙

3. 가입 페이지 만들기

joinForm.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>join</title>
</head>
<body>
<h1>join page</h1>
<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>sign up</button>
</form>
</body>
</html> 

method는 POST로, post는 새로운 것을 하나 더 만들겠다는 것이다.

join page는 다음과 같다. 여기서 이름과 비밀번호 그리고 이메일 버튼을 누른 후 가입 버튼을 눌러보자.

User(id=0, username=love, password=1234, email=love@nate.com, role=null, createDate=null)

sts 콘솔창에서 사용자 데이터를 잘 받아왔음을 확인할 수 있다.

  1. user repository 만들기

복잡하게 서비스를 만들지는 않을 것. 레파지토리 패키지를 생성한 후 인터페이스를 만들자.

UserRepository 인터페이스를 만들고 JpaRepository를 extends 한다. 타입은 User 타입이고 User model의 primary key는 Type이 Integer

그러면 기본적으로 JpaRepository가 CRUD를 갖고 있다.

User에서
id는 @GeneratedValue, createDate는@CreationTimestamp에 의해 자동으로 생성됨.
그래서 user.setRole로 역할만 정해주면 된다.

이렇게 설정만 해도 회원가입이 잘된다. 하지만 비밀번호: 1234 => 시큐리티로 로그인을 할 수 없다. 이유는 패스워드가 암호화가 안되었기 때문이다. 그래서 패스워드 암호화를 해준다. SecurityConfig에서 간단하게 패스워드 암호화를 빈으로 등록을 해주자.

먼저 빈을 만들자.

여기서 잠깐, 빈이 무엇일까?...
@Bean
@Bean 어노테이션과 @Component 어노테이션 둘다 Spring(IoC) container 에 Bean 을 등록하도록 하는 메타 데이터를 기입하는 어노테이션이다. 그렇다면 왜 두개나 만들어 놓았을까? 둘의 용도가 다르기 때문이다.

Bean 어노테이션의 경우 개발자가 직접 제어가 불가능한 외부 라이브러리등을 Bean으로 만들려 할때 사용된다. 반면 component 어노테이션의 경우 개발자가 직접 작성한 class를 Bean으로 등록하기 위한 어노테이션이다.


[Reference]

이 글은 유투버 데어 프로그래밍의 스프링 부트 시큐리티 강좌를 바탕으로 정리한 내용입니다.
https://galid1.tistory.com/494

profile
Step by step goes a long way ✨

0개의 댓글