1.회원정보 db작성
create table user_info(
user_id varchar(100) not null,
user_pw varchar(100) not null,
user_name varchar(100) not null,
user_email varchar(100) not null,
primary key(user_id)
);
이따가 쓰기 위해 값을 미리 넣어두자
insert into user_info(user_id,user_pw,user_name,user_email) VALUES('admin','1234','관리자','admin@nvaer.com');
2.db 연결 mapper만들기
<select id="userLogin" parameterType=UserVO$LoginRequest resultType=UserVO$Response>
select user_id,
user_pw,
user_name,
user_email
from user_info
where user_id = #{userId}
and user_pw = #{userPw}
</select>
던지는 값은 Request니까 LoginRequest를 써주고 , 결과값은 Response이다.
3.vo 작성하기
public class UserVO{
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@Budilder
public static class Response{
private String userId;
private String userPw;
private String userName;
private String userEmail;
}
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@Budilder
public static class LoginRequest{
private String userId;
private String userPw;
}
}
Response와 Request를 나누어준다.
@Builder 패턴을 사용한 이유는 두 객체에 같은 필드값이 들어가있어서 에러가 발생할 수 있기 때문이다 . 빌더패턴은 복잡한 객체 생성시 꼭 필요한 어노테이션이다.
빌더패턴은 이전에 정리해 두었다
https://puddingdev.tistory.com/58
자바 빌더패턴 @Builder , 메서드 체인(Method chaining) 알아보기
빌더패턴이란...? 복잡한 객체의 생성과 그 표현을 분리하는 것이다. 그렇게 함으로써, 같은 생성자로 다른 표현을 만들 수 있다. 빌더패턴이 필요한 이유를 찾아보자. 먼저, 메서드 체인(method cha
puddingdev.tistory.com
@NoArgsContructor는 new 객체를 생성하지 않고도 LoginRequest.UserId 이런식으로 바로 불러낼 수 있다
static을 써서 이미 가능하지만 한번 더 써준다.
@AllArgsContructor는 필드값을 이용하여 생성자를 만들어준다
public LoginRequest(String userId){
this.userId = userId;
}
이런식으로 필드값을 파라메터 값 안에 넣어서 생성자를 만들어준다. 만약 디폴트 값으로 생성자가 발생한다면 객체에서 값을 부를 때 사용할 수 없다 예를 들어 new LoginRequest('admin') 이런식으로 작성했을 때, 디폴트 값으로 생성자가 발생했었다면 , 값을 부를 수 없다.
4.controller 작성하기
1.로그인 화면 Get
@Controller
@AllArgsConstructor
public class LoginController{
private final LoginService loginService
@GetMapping("/login")
public ModelAndView login(){
ModelAndView view = new ModelAndView();
view.setViewName("views/login/loginForm");
return view;
}
}
Get : 단순 데이터를 조회한다 . 처음 로그인 화면은 Get방식을 사용하였다.
2.로그인 요청 화면 Post
@PostMapping("/login/proc)
public ModelAndView loginProc(@ModelAttribute UserVO.LoginRequest loginRequest,
HttpServletRequest request){
ModelAndView view = new ModelAndView();
try{
UserVO.Response user = loginService.loginUser(loginRequest);
if(user == null){
view.addObject("ResultCode","400");
view.addObject("resultMsg","아이디나 패스워드가 잘못되었습니다.");
view.setViewName("views/login/loginForm");
}else{
HttpSession session = request.getSession();
session.setAttribute("userInfo",user);
session.setMaxInactiveInterval(30*60);
view.setViewName("redirect:/");
}
}catch(Exception e){
e.printStackTrace();
}
return view;
}
Post : 데이터를 서버에 요청하여 제출하거나 수정하는 역할을 한다.
서블렛 : 사용자 요청에 대한 응답을 해주는 것이다. html을 통하여 응답하며 HttpServletRequest , HttpServletResponse를 통하여 확인한다.
HttpServletRequest : http의 request 정보를 서블렛에 전달 , 로그인 시작시 사용
댓글