★ PART · BOARD

안전한 회원가입/로그인

Spring 기초
SMHRD

학습 목표

1. 문제

v2 의 두 문제 — 평문, 무상태 — 그리고 v2 의 pwd VARCHAR(20) 으론 BCrypt 60자 해시가 안 들어감.

2. 새 도구

ALTER + BCrypt + HttpSession: 컬럼 길이를 늘리고, v2 코드에 두 줄을 추가·교체해서 안전한 v3 로 진화.

3. 코드

-- 1) 스키마 마이그레이션 ALTER TABLE mymember MODIFY COLUMN pwd VARCHAR(100) NOT NULL; -- 기존 평문 데이터는 비우고 다시 가입 (학습용) // com.smhrd.service.MemberService @Service public class MemberService { @Autowired MemberMapper mapper; private BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); public void signup(Member m) { m.setPwd(encoder.encode(m.getPwd())); // ← BCrypt! mapper.insert(m); } public Member login(String id, String pwd) { Member m = mapper.selectOne(id); if (m != null && encoder.matches(pwd, m.getPwd())) { return m; } return null; } } // com.smhrd.controller.LoginController @Controller public class LoginController { @PostMapping("/login") public String login(@RequestParam String id, @RequestParam String pwd, HttpSession session) { Member m = service.login(id, pwd); if (m != null) { session.setAttribute("loginUser", m); // ← 세션! return "redirect:/"; } return "redirect:/login?error"; } @GetMapping("/logout") public String logout(HttpSession session) { session.invalidate(); return "redirect:/"; } }

4. 정리

5. Before / After

전 차시

v2 의 두 문제 — 평문, 무상태 — 를 해결할 시간.

이번 차시

평문 사라짐 + 세션으로 로그인 유지. v3 마일스톤.

학습 확인 체크리스트