본문 바로가기
Spring/[Spring]login(로그인 및 회원가입)

로그인 만들기

by Ms.Pudding 2022. 2. 18.

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 정보를 서블렛에 전달 , 로그인 시작시 사용 

 

 

 

댓글