[스프링 시큐리티] 시큐리티 위에서 회원가입을 만들어보자

코린이서현이·2024년 5월 26일
0
post-thumbnail

들어가면서

요구 명세서에 적지는 않지만 어느 프로젝트던 만들어야하는 기능 "회원가입"과 로그인!
오늘 시큐리티 위에서 만들어보자.

시큐리티 회원가입

🌿어떻게 해야할까? + 실제로 알게 된 내용!

시큐리티를 적용하면 이 서비스(지금은 웹!)의 보안을 책임지고 가져가게 된다.
(👍 시큐리티가 라이브러리가 아니고 프레임워크인 이유)

따라서 시큐리티 회원가입에서는 비밀번호 인코딩 하는 과정이 필수적이다.

config 파일에서 BCryptPasswordEncoder를 빈으로 등록해서 요걸로 인코딩을 하게 된다.

지금은 여기까지만 이해해보자!!

실제 과정에서의 코드

로그인 페이지 만들기

    @GetMapping("/login")
    public String login() {
        return "loginForm";
    }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>로그인 페이지</title>
</head>
<body>
<h1>로그인 페이지</h1>

<form>
  <input type="text" name="username" placeholder="username"/> <br>
  <input type="text" name="password" placeholder="password"/> <br>
  <button>로그인</button>

</form>
</body>
</html>

모델만들어서 db에 올리기

@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;
}

회원 가입 용 페이지 만들기, 컨트롤러 부분 수정하기

    @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>

<form action="/security/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>

유저레파지토리 인터페이스 만들기

package com.jsh.securitystudy.repository;

import com.jsh.securitystudy.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

//인터페이스인데 실수로 class로 선언해버렸다ㅜㅜ
public interface UserRepository extends JpaRepository<User,Integer> {
}

회원가입 요청 유저 DB에 넣기

@Configuration
@EnableWebSecurity
public class MySecurityConfig{

    @Bean //빈으로 등록하기
    SecurityFilterChain filterChain(HttpSecurity http) throws Exception{

    @Bean
    public BCryptPasswordEncoder encoderPWD() {
        return new BCryptPasswordEncoder();
    }

}
@Controller
public class IndexController {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private BCryptPasswordEncoder passwordEncoder;

    @PostMapping("/join")
    public @ResponseBody String join(User user) {
        System.out.println("user = " + user);
        user.setRole("USER");
        String rawPassword = user.getPassword();
        String encPassword = passwordEncoder.encode(rawPassword);
        user.setPassword(encPassword); //이거 너무 안전하지 않은 거 아녀?
        userRepository.save(user);
        return "redirect:loginForm"; //이게 뭐여
    }


}

마무리하면서

중간에 컨트롤러에서 막~하고 get도 편안하게 쓰고 하는데, 요 부분은 실습을 위해서 그냥 넘어가자..~ 

🌿 인프런의 최주호 강사님의 스프링부트 시큐리티 & JWT 강의를 참고하는 중
🔗 깃허브 링크

profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글