Hello

4. 시큐리티 회원가입

by 볼빵빵오춘기

IndexController

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

 

loginForm.html

<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>
더보기

실행결과

위의 페이지를 보면 로그인페이지가 나오는 것을 확인가능하나 회원이 없기때문에 당장은 로그인이 어렵다.

 

User

@Entity
@Data
@Table(name = "SECURITY1_USER")
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;
}
더보기

실행 결과

Database에 SECURITY1_USER table이 만들어진것을 확인할 수 있다.

강의에서는 @Table() 은 없지만 개인적으로 구분하기 위해 테이블명을 다른 것으로 씀.

@Table() 로 만들지 않으면 테이블이름을 User로 될 것이다.

 

IndexController

  • 기존에 login() → loginForm() 으로 변경, /login” → “/loginForm”으로 변경, return값도 “login” → “loginForm” 변경했다.
  • joinForm 추가했다.
  • joinProc() 은 삭제했다.
@GetMapping("/loginForm")
public String loginForm(){
    return "loginForm";
}

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

@PostMapping("/join")
public @Response String join(){
    return "join";
}

 

SecurityConfig

.loginPage("/login"); → .loginPage("/loginForm"); 으로 변경했다.
why? 위에 IndexController.java 에서 login하려고 들어가는 페이지를 변경했기 때문이다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();
    http.authorizeRequests()
            .antMatchers("/user/**").authenticated()
            .antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')")
            .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
            .anyRequest().permitAll()
            .and()
            .formLogin()
            .loginPage("/loginForm");
}

 

loginForm.html

회원가입 Form으로 가는 a 링크 추가한다.

<form>
    <input type="text" name="username" placeholder="username"><br>
    <input type="password" name="password" placeholder="password"><br>
    <button>로그인</button>
</form>
<a href="/joinForm">회원가입을 아직 하지 않으셨나요?</a>

 

joinFrom.html

loginForm.html 을 파일 복사 후 이름을 joinForm.html으로 변경 후 코드 수정한다.

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

 

IndexController

파라미터로 User 객체 담아온다. (→ 잘 담아져서 왔나 Sysout으로 확인해보기)

@PostMapping("/join")
public @Response String join(User user){
    System.out.println(user);
    return "join";
}

 

 

UserRepository

※ 간단하게 하기위해서 따로 service 만들지 않고 repository만 만들었다.

// CRUD 함수를 JpaRepository가 들고 있음
// @Repository라는 어노테이션이 없어도 IoC가 된다. why? JpaRepository을 상속 받았기 때문에
public interface UserRepository extends JpaRepository<User, Integer> {
}

 

IndexController

userRepository.save(user); 로 하면 회원가입은 잘되지만 시큐리티 로그인 할 수 없다.
why? 이유는 비번이 암호화가 안되어있어 비밀번호가 맞지않는다고 나와 로그인이 불가하다.

@Autowired
private UserRepository userRepository;
@PostMapping("/join")
public @Response String join(User user){
    System.out.println(user);
    user.setRole("ROLE_USER");
    userRepository.save(user); // 회원가입 잘됨. but : 1234 -> 시큐리티로 로그인 할 수 x, 이유는 비번이 암호화가 안되어있기 때문에
}

 

SecurityConfig

pw암호화해줄 코드 추가해준다.

// 해당 메서드의 리턴되는 오브젝트를 IoC로 등록해준다.
@Bean
public BCryptPasswordEncoder encodePwd() {
    return new BCryptPasswordEncoder();
}

 

IndexController

join() 코드추가 및 BCryptPasswordEncoder DI

@PostMapping("/join")
public @Response String join(User user){
    System.out.println(user);
    user.setRole("ROLE_USER");
    String rawPassword = user.getPassword();
    String encPassword = bCryptPasswordEncoder.encode(rawPassword);
    user.setPassword(encPassword);
    userRepository.save(user); // 회원가입 잘됨. but : 1234 -> 시큐리티로 로그인 할 수 x, 이유는 비번이 암호화가 안되어있기 때문에
}

 

'강의 따라하기 > Security1' 카테고리의 다른 글

6. 시큐리티 권한처리  (0) 2024.02.27
5. 시큐리티 로그인  (0) 2024.02.27
3. 시큐리티 설정  (1) 2024.01.14
1. 환경설정  (1) 2024.01.14
스프링부트 - Security1 프로젝트  (1) 2024.01.14

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기