저번 회원가입 정보를 기반으로 로그인을 하는 구현이다.
회원가입의 코드 메커니즘과 똑같이 MariaDB를 데이터베이스로 사용하고 Java 언어를 사용하여 MyBatis 프레임워크를 이용하며 Annotation 방식으로 데이터베이스와 상호작용한다.
// User 로그인
@Select("select * from user where user_id=#{user_id} and user_pwd=#{user_pwd}")
UserDto userLoginProcess(@Param("user_id") String user_id, @Param("user_pwd") String user_pwd);
@Select
사용함으로서 해당 메소드가 데이터베이스에서 데이터를 조회하는 작업을 수행한다는 의미로 생각하면 된다.
#{}
은 동적인 표현을 의미한다. SQL 인젝션과 같은 보안 문제를 방지하고, 동적인 쿼리를 쉽게 생성한다.
사용자가 HTML 폼에서 입력한 값과 데이터베이스의 user 테이블에서 user_id 열의 값이 일치하는지를 검사하는 쿼리문이다.
Mybatis의 SQL 문장에 다수의 파라미터를 전달할 때는 전달되는 변수들에 꼭 @Param 어노테이션을 붙여줘야한다.
@Param("user_id")
는 MyBatis에서 메서드 파라미터와 SQL 쿼리의 매핑을 지정하는 어노테이션이다. 즉, 클라이언트에서 전달된 값을 MyBatis가 SQL 쿼리에 전달하는 방법이다.
따라서 userLoginProcess 메서드는 매개변수로 전달된 아이디와 비밀번호 값을 가지고 있다.
// 사용자 로그인 가능 여부 판단하는 메서드
public UserDto userLoginProcess(String user_id, String user_pwd) {
return dataMapperInter.userLoginProcess(user_id, user_pwd);
}
데이터베이스에서 사용자 로그인 프로세스를 수행하기 위해 호출되는 메서드이다.
user_id와 user_pwd라는 두 개의 문자열 매개변수를 받는다.
@Autowired
private DataMapperInter dataMapperInter;
UserDao는 DataMapperInter 의존성 주입을 받고 있음으로 userInsertData()
호출해 클라이언트가 입력한 아이디와 비밀번호 값을 반환한다.
@PostMapping("/userLogSuccess")
public String processLoginForm(@RequestParam("user_id") String user_id,
@RequestParam("user_pwd") String user_pwd,
HttpSession session) {
UserDto user = userDao.userLoginProcess(user_id, user_pwd);
if (user != null) {
session.setAttribute("userSession", user);
session.setAttribute("user_id", user.getUser_id());
return "redirect:/usersessionkeep";
}
else {
return "user/userlogin"; // 로그인 실패 시 userlogin.html로 이동.
}
}
클라이언트가 로그인을 하기 위해 Post방식으로 userLogSuccess 핸들러 매핑을 요청했을 때 수행되는 메서드이다.
기본적으러 processLoginForm()
는 클라이언트가 요청한 아이디와 비밀번호 데이터를 받고, 세션 객체를 파라미터로 받는다.
세션(Session)은 여기서 설명하지 않고 따로 작성해서 설명하는점 참고해주세요
의존성 주입을 통해 userDao 객체를 사용하여 사용자 로그인을 처리한다. 이 메서드가 데이터베이스에서 사용자 정보를 가져오고, 가저온 정보를 UserDto 객체에 저장한다.
사용자 정보가 데이터베이스에서 확인되면, 해당 정보를 세션에 저장하고 usersessionkeep 핸들러 매핑으로 리다이렉션한다.
로그인에 실패하면 사용자를 다시 로그인 페이지로 이동시킨다.