[JAVA] 64. SpringBoot Security

윤설안's avatar
Jul 25, 2025
[JAVA] 64. SpringBoot Security

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

notion image
 

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

An's Blog