Spring/Spring 공부

[spring] 2. 회원 가입

congs 2023. 6. 5. 15:19

 

1. home.jsp에 회원가입 버튼 생성

 

<a href="/member/signup"><button type="button">회원가입</button></a>

 


 

2. 회원가입 페이지 생성 : view폴더안 user폴더생성 후 signup.jsp생성!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>signup</title>
</head>
<body>

	<h1>SignUp Page</h1>
	
		<form action="/member/signup" method="post">
		id : <input type="text" name="id" placeholder="아이디"><br>
		password : <input type="password" name="pw" placeholder="비밀번호"><br>
		name : <input type="text" name="name" placeholder="이름"><br>
		email : <input type="text" name="email" placeholder="이메일"><br>
		home : <input type="text" name="home" placeholder="주소"><br>
		age : <input type="text" name="age" placeholder="나이"><br>
		
		<button>회원가입</button>
		
	</form>
	
</body>
</html>

 


3. UserController에 메서드 생성

package com.myweb.www.controller;


import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.myweb.www.domain.UserVO;
import com.myweb.www.service.UserService;

import lombok.extern.slf4j.Slf4j;

@Slf4j 
@RequestMapping("/member/*")
@Controller
public class UserController {

	private static final Logger log = LoggerFactory.getLogger(UserController.class);
	//상단에 @Slf4j을 적으면 필요가 없음
	
	@Inject
	private UserService usv;
	
	@GetMapping("/signup") //select문느낌 (있는지 확인만!)
	public String index(Model m) {
		log.info("home으로 접근 완료");
//		m.addAttribute("msg_home",1);
		return "/user/signup";
	}
	
	@PostMapping("/signup") //insert문느낌 (돌아오는 리턴값이 있음)
	public String signUpPost(Model m, UserVO uvo) {
		log.info("회원가입 접근완료");
		log.info(uvo.toString());
		int isOk = usv.signup(uvo);
		if(isOk >0) {
			m.addAttribute("msg_signup", 1); //로그인되는 경우
		}else {
			m.addAttribute("msg_signup", 0); //로그인이 안되는 경우
		}
		return "home"; //결과페이지
	}
}

3. UserController에서 연결하며 생성

UserService

 


 이때! 패스워드 암호화를 위해서 추가 설정이 필요!! 

https://jungeun980906.tistory.com/358

 

[spring] BCryptPasswordEncoder : 패스워드 암호화 클래스

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.

jungeun980906.tistory.com


UserServiceImpl

package com.myweb.www.service;

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import com.myweb.www.controller.UserController;
import com.myweb.www.domain.UserVO;
import com.myweb.www.repository.UserDAO;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class UserServiceImpl implements UserService {
	
	private static final Logger log = LoggerFactory.getLogger(UserServiceImpl.class);
	
	@Inject
	private UserDAO udao;
	@Inject
	BCryptPasswordEncoder passwordencoder;

	@Override
	public int signup(UserVO uvo) {
		log.info(">>>signup service 진입");
		
		UserVO tempUser = udao.getUser(uvo.getId());
		//아이디가 중복되는 경우 회원가입은 실패
		//아이디를 주고 DB에서 일치하는 유저를 리턴해달라고 요청
		// - 일치하는 유저가 없으면 1 = 가입
		// - 일치하는 유저가 있으면 0 = 미가입
		
		//리턴값이 있는 경우 = 아이디가 중복되는 경우 (0리턴=미가입)
		if(tempUser != null) { 
			return 0;
		}
		
		//id가 null이거나 값이 없는 경우 가입불가
		if(uvo.getId() == null || uvo.getId().length() == 0) {
			return 0;
		}
		
		//password가 null이거나 값이 없는 경우 가입불가
		if(uvo.getPw() == null || uvo.getPw().length() == 0) {
			return 0;
		}
		
		//회원가입 진행
		String pw = uvo.getPw();
		//encode(암호화) / matches(원래 비번, 암호화된 비빈이 맞는지 확인)
		String encodePw = passwordencoder.encode(pw); //기존의 pw를 암호화
		//uvo의 패스워드를 암호화된 패스워드로 수정
		uvo.setPw(encodePw);
		//회원가입 => insert
		int isOk = udao.insertUser(uvo);
		return isOk;
	}
}

UserDAO

package com.myweb.www.repository;

import com.myweb.www.domain.UserVO;

public interface UserDAO {

	UserVO getUser(String id); //여기서 바로 mapper로 갈예정 (DAOImpl없음)

	int insertUser(UserVO uvo);

}

UserMapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="com.myweb.www.repository.UserDAO">

<select id="getUser" resultType="com.myweb.www.domain.UserVO">
select * from user where id=#{id}
</select>
<insert id="insertUser">
insert into user(id, pw, name, email, home, age)
values (#{id}, #{pw}, #{name}, #{email}, #{home}, #{age})
</insert>
</mapper>

 


 

출력화면