회원과 게시판 — 읽기 자료
① 평문 저장 ② 무상태 — 그리고 v2 의 pwd VARCHAR(20) 으론 BCrypt 60자 해시가 안 들어감.
먼저 컬럼 길이를 늘리고, v2 코드에 두 줄을 추가·교체해서 안전한 v3 로 진화.
-- 1) 스키마 마이그레이션 (BCrypt 60자 수용)
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:/";
}
}
v2 의 두 문제 — 평문, 무상태 — 를 해결할 시간.
평문 사라짐 + 세션으로 로그인 유지. v3 마일스톤.