Programming/Spring
[스프링 프레임워크]게시판 만들기 #7 : 로그인
hyunipad
2021. 12. 5. 13:34
반응형
본 포스팅은 스프링 프레임워크를 이용하여 기본적인 게시판을 만드는 방법을 설명합니다.
기본적인 내용은 지난 포스팅을 참고해주시기 바랍니다.
안녕하세요. 이번 포스팅에서는 Spring Framework에서 로그인 기능 구현에 대해 알아보도록 하겠습니다.
기존에 진행했던 게시판 구현에 대해서는 제 블로그를 참조해주시기 바랍니다.
https://hyunipad.tistory.com/category/Java/Spring
먼저 자신의 데이터 베이스에 member 테이블을 구축하고, 임의의 데이터 하나를 추가해줍니다. 그 후에 Spring이 데이터를 담을 수 있도록 MemberDTO(MemberBean) 클래스를 추가합니다.
MemberDTO.java
데이터 같은 경우에는 기능 구현을 중점적으로 연습하기 위해서 최대한 간단하게 구현하였습니다.
package com.board.domain;
/*
CREATE TABLE member(
ID VARCHAR2(50),
PASSWORD VARCHAR2(50),
NAME VARCHAR2(20),
) */
public class MemberDTO {
String id;
String password;
String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
login.jsp
로그인을 위한 jsp페이지입니다. 아이디, 비밀번호 입력을 위한 input과 로그인, 회원가입을 위한 버튼 두 개를 추가합니다. 스크립트 태그도 확인해주시기 바랍니다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="${path}/resources/js/member.js"></script>
<title>Insert title here</title>
</head>
<body>
<form id="frm">
<div>아이디 : <input type="text" id="id" name="id"></div>
<div>비밀번호 : <input type="text" id="password" name="password"></div>
<button type="button" onclick="fn_login();">로그인</button>
<button type="button" onclick='location.href="/member/join"'>회원가입</button>
</form>
</body>
</html>
MemberController.java
기존에 있던 HomeController를 수정하여 만들었습니다.
package com.board.controller;
import java.util.Locale;
import javax.inject.Inject;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.board.domain.MemberDTO;
import com.board.service.MemberService;
@Controller
public class MemberController {
@Inject
private MemberService service;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String login(Locale locale, Model model) {
return "/member/login";
}
@ResponseBody
@RequestMapping(value = "/member/login", method = RequestMethod.POST)
public String regi(Locale locale, Model model, MemberDTO dto, HttpSession session) throws Exception {
MemberDTO dto2 = service.login(dto);
if(dto != null) {
session.setAttribute("id", dto2.getId());
return "Y";
}else {
return "N";
}
}
}
member.js
컨트롤러에서 리턴해주는 값에 따라 Y가 리턴되면 게시판 목록으로 이동합니다.
function fn_login(){
var id = $("#id").val();
var password = $("#password").val();
$.ajax({
type : "POST",
url : "/member/login",
data : {id : id, password : password},
success: function(data){
if(data == "Y"){
location.href = "/board/list";
}else{
alert("아이디 또는 비밀번호가 일치하지 않습니다.");
}
},
error: function(data){
alert("아이디 또는 비밀번호가 일치하지 않습니다.");
}
});
};
MemberServiceImpl.java
package com.board.service;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.board.dao.BoardDAO;
import com.board.dao.MemberDAO;
import com.board.domain.BoardDTO;
import com.board.domain.MemberDTO;
@Service
public class MemberServiceImpl implements MemberService {
@Inject
private MemberDAO dao;
@Override
public MemberDTO login(MemberDTO dto) {
return dao.login(dto);
}
}
MemberDAOImpl.java
package com.board.dao;
import java.util.List;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
import com.board.domain.BoardDTO;
import com.board.domain.MemberDTO;
@Repository
public class MemberDAOImpl implements MemberDAO {
@Inject
private SqlSession sqlSession;
private static String namespace = "com.board.mappers.member";
@Override
public MemberDTO login(MemberDTO dto) {
return sqlSession.selectOne(namespace+".login", dto);
}
}
memberMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.board.mappers.member">
<select id="login" resultType="com.board.domain.MemberDTO">
SELECT
ID,
PASSWORD,
NAME
FROM
MEMBER
WHERE
ID = #{id}
AND PASSWORD = #{password}
</select>
</mapper>
게시판 만들기 연습은 여기까지 마치도록 하겠습니다.
기본적인 연습은 된거 같아서 프로젝트를 진행하며 쓰고 싶은 주제가 생기면 찾아뵙도록 하겠습니다.
반응형