Spring Security는 기본적으로 로그인 페이지를 제공하나, 직접 로그인 페이지를 만들어 사용하고자 하는 경우에 대해서 알아보고자 한다.
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
Login Page
<hr>
<form action="/loginProc" method="post" name="loginForm">
<input id="username" type="text" name="username" placeholder="id"/>
<input id="password" type="password" name="password" placeholder="password"/>
<input type="hidden" name="_csrf" value="{{_csrf.token}}"/>
<input type="submit" value="login"/>
</form>
</body>
</html>

/login URL로 접근하면 SecurityConfig에 지정된 페이지에서 지정된 로그인메소드에 의해 로그인을 진행하고 성공했을 경우의 URL까지 지정하여 로그인 이후의 절차까지 밟을 수 있다.
http
.formLogin((auth) -> auth.loginPage("/login")
.loginProcessingUrl("/loginProc")
.permitAll().defaultSuccessUrl("/"));

2. Http Basic 방식
Http 팝업을 통해 진행하는 방식이다. 더 엄격하게 관리되어야하는 서버에서 진행하며, 아이디와 비밀번호를 BASE64 방식으로 암호화함.
cf. BASE64 방식 : 입력된 바이트 스트림을 ASCII CODE로 변환하는 방식
http
.httpBasic(Customizer.withDefaults());

다음과 같은 팝업창을 띄워줌
3. InMemory방식
해당 방식은 지정된 ID/PW의 유저들만 접속이 가능하며 해당 유저들은 삭제하거나 수정할 수 없고, 새로운 유저의 가입도 불가능하다.
이는 다음과 같이 구현할 수 있다.
@Bean
public UserDetailsService userDetailsService() {
UserDetails user1 = User.builder()
.username("user1")
.password(bCryptPasswordEncoder().encode("1234"))
.roles("ADMIN")
.build();
UserDetails user2 = User.builder()
.username("user2")
.password(bCryptPasswordEncoder().encode("1234"))
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user1, user2);
}