1. Spring Security을 사용하면 편리한 점
Spring Security는 다음을 대신 처리해줌:
- 로그인/로그아웃 처리
- 세션 인증
- 비밀번호 암호화 비교 (
BCryptPasswordEncoder
)
- 권한(Authorization) 체크
2. 현재 구조
/join-form
→ 회원가입 폼
/login-form
→ 로그인 폼
/main
→ 로그인 성공 시 이동
/user/**
→ 인증된 사용자만 접근 가능
User
@NoArgsConstructor
@Getter
@Entity
@Table(name = "user_tb")
public class User {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
private Integer id;
private String username;
private String password;
private String email;
@Builder
public User(Integer id, String username, String password, String email) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
}
UserController
@Controller
public class UserController {
private UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/main")
public String main() {
return "main";
}
@GetMapping("/join-form")
public String joinForm() {
return "user/join-form";
}
@PostMapping("/join")
public String join(String username, String password, String email) {
userService.회원가입(username, password, email);
return "redirect:/main";
}
}
UserRepository
@Repository
public class UserRepository {
private EntityManager em;
public UserRepository(EntityManager em) {
this.em = em;
}
public void save(String username, String password, String email) {
em.createNativeQuery("insert into user_tb (username, password, email) values (?, ?, ?)")
.setParameter(1, username)
.setParameter(2, password)
.setParameter(3, email)
.executeUpdate();
}
}
main.mustache
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Document</title>
</head>
<body>
<h1>메인 페이지</h1>
</body>
</html>
join-form.mustache
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Document</title>
</head>
<body>
<h1>회원가입 페이지</h1>
<form method="post" action="/join">
<input type="text" name="username" value="ssar"><br>
<input type="text" name="password" value="1234"><br>
<input type="text" name="email" value="asd@mail"><br>
<button>회원가입</button>
</form>
</body>
</html>
서버 포트 설정 8080
spring에 내장 tomcat으로 인해 WAS가 실행
server.encoding 설정 UTF-8 고정
3. Spirng Security 구조

Spring Security의 인증 방식SecurityConfig 커스터마이징비밀번호 검증CSRF 설정역할(Role) 체크
BasicAuthenticationFilter
JWT인증Share article