[Spring/게시판] 3.1 회원가입 추가기능

[Spring/게시판] 3. 회원가입하기 2020/04/23 - [개발/Spring] - [Spring/게시판] 2. Mybatis 연동하기 [Spring/게시판] 2. Mybatis 연동하기 2020/04/23 - [개발/Spring] - [Spring/게시판] 1. MySql 연동 [Sprin..

hillier.tistory.com


1. dto 패키지 생성후 UserDto.java 생성

package com.tnqls.spring.dto;

import com.tnqls.spring.domain.User;

public class UserDto {

	private String userid;
	private String password;
	
	
	public static class LoginInfo {
		private String userid;
		private String password;
		
		public String getUserid() {
			return userid;
		}
		public void setUserid(String userid) {
			this.userid = userid;
		}
		public String getPassword() {
			return password;
		}
		public void setPassword(String password) {
			this.password = password;
		}
	}
}

DTO (Data Transfer Object) 계층간 데이터 교환을 위한 객체. 도메인 객체에서 불필요한 속성들을 빼고싶을때 사용.

2. userService.java에 내용 추가

	public User loginCheck(UserDto.LoginInfo userdto) {
		User user = userMapper.getUserById(userdto.getUserid());
		if(userdto.getPassword().equals(user.getPassword())) {
			return user;
		}
		else {
			return null;
		}
	}

3. HomeController.java 수정

//	로그인 화면(GET)
	@RequestMapping(value = "/login", method = RequestMethod.GET)
	public String login() {
		return "login";
	}
    
//	로그인(POST)	
	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public String postlogin(HttpSession session, UserDto.LoginInfo user, Model model) {
		if(session.getAttribute("login") != null) {
			session.removeAttribute("login");
		}
		User loginuser = userService.loginCheck(user);
		
		if(loginuser!=null) {				//	성공
			session.setAttribute("login",loginuser);
			logger.info("success login");
			return "redirect:/main";
		}						//	실패
		logger.info("fail login");
		return "redirect:/login";	
	}
    
//	로그아웃	
	@RequestMapping(value = "/logout", method = RequestMethod.GET)
	public String logout(HttpSession session) {
		session.invalidate();
		logger.info("ByeBye Logout success");
		return "redirect:/";
	}
    
//	메인화면
	@RequestMapping(value = "/main", method = RequestMethod.GET)
	public String main() {
		return "main";
	}
	

※ session에 login이라는 attribute를 만들어서 로그인 체크

4. login.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<title>Login</title>
</head>
<body>
<h1>
	로그인
</h1>
<p><a href="/board">Home</a></p>
<form action="" method="post">
	<p>
		<label for="userid">아이디</label>
		<input type="text" id="userid" name="userid" required="required"/>
	</P>
	<p>
		<label for="password">비밀번호</label>
		<input class="input-pwd" type="password" id="pwd1" name="password" required="required"/>
	</P>
	
	<button type="submit" id="submit">로그인하기</button>
	<p><a href="/board/signup">회원가입하러가기</a></p>
</form>
</body>
</html>

5. main.jsp 생성

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="true" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    

<html>
<head>
	<title>Main</title>
</head>
<body>
<h1>
	게시판
</h1>

<P>  안녕하세요 ${login.userid}님 </P>

<input type="button" name="Logout" value="로그아웃"  onclick="location.href='logout'">
</body>
</html>

위에 session="true"로 해주어야 session값 사용 가능

로그인 안했을 때 로그인 요청하는 기능 만들기

6. interceptor패키지를 만들고 AuthInterceptor.java 생성

package com.tnqls.spring.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;


public class AuthInterceptor extends HandlerInterceptorAdapter {
	

	private static final Logger logger = LoggerFactory.getLogger(AuthInterceptor.class);
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		HttpSession httpSession = request.getSession();
		
		if(httpSession.getAttribute("login")==null) {
			logger.info("current user is not logged");
			response.sendRedirect("/board/login");
			return false;
		}
		return true;
	}
	
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub
        super.postHandle(request, response, handler, modelAndView);
    }
	

}

Interceptor - 컨트롤러의 HttpRequest와 HttpResponse를 가로채는 역할

  preHandle : 컨트롤러가 호출되기 전에 실행되는 메서드

  postHandle: 컨트롤러 메서트 처리 끝난후 return되고 화면을 띄워주는 처리가 되기 직전에 수행

  afterCompletion: 컨트롤러가 수행되고 화면처리까지 끝나고 호출

7. servlet-context.xml에 내용 추가

<beans:bean id="AuthInterceptor" class="com.tnqls.spring.interceptor.AuthInterceptor"/>

<mvc:interceptors>
	<mvc:interceptor>
		<mvc:mapping path="/main"/>
		<beans:ref bean="AuthInterceptor"/>
	</mvc:interceptor>
</mvc:interceptors>

※ 포함시키고 싶은 곳은 mapping

  전체다 mapping path= "/**"하고 포함시키지 않고 싶은 곳은 exclude-mapping 으로 설정 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기