ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Security - 회원가입
    Framework & Library/Spring Security 2021. 9. 30. 16:21

    User 객체 생성

    @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;
    
        private String provide;
    
        private String providerId;
    
        @CreationTimestamp
        private Timestamp createDate;
    
    }

    위 코드는 회원가입을 하는 사용자의 정보를 받기 위한 User 객체이다.

    User 객체는 id, 사용자 이름, 패스워드 등의 정보를 담고 있다.


    회원가입

    회원가입 양식 Controller
    @GetMapping("/joinForm")
    public String joinForm() {
        return "joinForm";
    }

    IndexController 클래스에 회원가입에 대한 양식을 입력받는 메서드를 추가한다.

     

    loginForm.html, joinForm.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>
    <a href="/joinForm">회원가입</a>
    </body>
    </html>

    ㆍ 사용자로부터 로그인 양식을 입력받는 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>

    ㆍ 사용자로부터 회원가입 양식을 입력받는 html 파일이다.

     

    UserRepository 생성
    public interface UserRepository extends JpaRepository<User,Integer> {
    }

    ㆍ 데이터베이스와 통신하기 위해 UserRepository 인터페이스를 생성한다.

     

    패스워드 암호화
    @Bean
    public BCryptPasswordEncoder encoder() {
        return new BCryptPasswordEncoder();
    }

    ㆍ SecurityConfig 클래스에 위 코드를 추가한다.

    BCryptPasswordEncoder는 사용자의 패스워드를 암호화해주는 객체이다.

    ㆍ @Bean 애너테이션을 통해 해당 메서드의 리턴되는 객체를 IoC로 등록해준다.

     

    회원가입 Controller
    @Autowired
    private BCryptPasswordEncoder encoder;

    IndexController 클래스에 위 코드를 추가한다.

    ㆍ @Autowired 애너테이션을 통해 Ioc에 등록된 BCryptPasswordEncoder 객체를 찾아서 주입시킨다.

     

    @PostMapping("/join")
    public String join(User user) {
        System.out.println(user);
    
        user.setRole("ROLE_USER");
        String rawPassword = user.getPassword();
        String encPassword = encoder.encode(rawPassword);
        user.setPassword(encPassword);
    
        userRepository.save(user);
    
        return "redirect:/loginForm";
    }

    ㆍ IndexController 클래스에 회원가입을 수행하는 join() 메서드를 작성한다.

    ㆍ 회원가입을 한 사용자에게 ROLE_USER 권한을 부여하고, 입력받은 패스워드를 encoder 객체를 통해 암호화를 한 후 데이터베이스에 저장한다.


    회원가입 테스트

    회원가입 양식 입력

     

    ㆍ 회원가입 페이지에서 양식을 모두 작성한 후 회원가입을 수행한다.

     

    데이터베이스 확인

     

    ㆍ 데이터베이스 확인 결과 패스워드가 암호화되었고 입력한 정보 또한 저장된 것을 확인할 수 있다.


     

    GitHub - qlsdud0604/spring-security-basic: 스프링 시큐리티의 기초를 학습하는 공간

    스프링 시큐리티의 기초를 학습하는 공간. Contribute to qlsdud0604/spring-security-basic development by creating an account on GitHub.

    github.com

     

    728x90

    댓글

Designed by Tistory.