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에서 연결하며 생성
이때! 패스워드 암호화를 위해서 추가 설정이 필요!!
https://jungeun980906.tistory.com/358
[spring] BCryptPasswordEncoder : 패스워드 암호화 클래스
보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.
jungeun980906.tistory.com
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;
}
}
package com.myweb.www.repository;
import com.myweb.www.domain.UserVO;
public interface UserDAO {
UserVO getUser(String id); //여기서 바로 mapper로 갈예정 (DAOImpl없음)
int insertUser(UserVO uvo);
}
<?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>
출력화면
'Spring > Spring 공부' 카테고리의 다른 글
[spring] 댓글 1. 댓글 작성 (0) | 2023.06.09 |
---|---|
[spring] 댓글 0. 테이블 생성, STS 기본 생성 (0) | 2023.06.09 |
[spring] BCryptPasswordEncoder : 패스워드 암호화 클래스 (0) | 2023.06.05 |
[spring] 1. DB 생성, STS 기본 생성 (0) | 2023.06.05 |
[spring] 프로젝트 설정 0-3. root-context.xml 설정 (0) | 2023.06.02 |