entity/board.java
package com.example.entity;
import java.sql.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonBackReference;
import lombok.Data;
@Data
@Entity
@Table(name = "MEMBERTBL")
public class Member {
@Id
@Column(length = 30)
String userid;
@Column(length = 200)
String userpw;
int age;
@Column(length = 15)
String phone;
@Column(length = 1)
String gender; // M, F
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm.ss.SSS")
@CreationTimestamp
@Column(name = "REGDATE", updatable = false)
Date regdate = null; //답글 작성일
@Column(length = 20)
String role; // ADMIN, SELLER ,CUSTOMER
@Column(length = 1)
int block=1;
config/SecurityConfig.java
// 회원 가입 환경 설정 => 로그인 로그아웃 다 만들고 업무 시작
package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
// 필터 설정 하기
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
// 권한에 대한 페이지 설정
// 127.0.0.1:8080/ROOT/*** ADMIN
// 127.0.0.1:8080/ROOT/*** SELLER
http.authorizeRequests()
.antMatchers("/admin", "/admin/**").hasAnyRole("ADMIN")
.antMatchers("/seller", "/seller/**").hasAnyRole("SELLER")
.antMatchers("/customer", "/customer/**").hasAnyRole("CUSTOMER")
.anyRequest().permitAll();
// 로그인 설정
http.formLogin().loginPage("/member/login.do")
.loginProcessingUrl("/member/login.do")
.usernameParameter("uid")
.passwordParameter("upw")
.defaultSuccessUrl("/")
.permitAll();
// 로그아웃 설정
http.logout()
.logoutUrl("/member/logout.do")
.logoutSuccessUrl("/")
.clearAuthentication(true)
.invalidateHttpSession(true)
.permitAll();
return http.build();
}
// 비밀번호의 hash 알고리즘 설정
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
repository/MemberRepository.java
package com.example.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.entity.Member; // entity 데이터 조회
@Repository
public interface MemberRepository extends JpaRepository<Member, String> {
// JpaRepository 인터페이스를 상속.
// JpaRepository 는 기본적인 CRUD 를 처리할 수 있는 getOne, findById, findAll, save, delete 등의 함수가 정의 되어 있어
// 간단한 내용을 데이타페이스로 부터 처리 할 수 있게 해줌.
}
templates/member_join.html 작성
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>회원가입</title>
</head>
<body>
<a th:href="@{/}"><button>홈</button></a>
<hr />
<form th:action="@{/member/join.do}" method="post"><br />
<input type="text" placeholder="아이디" name="userid" /><br />
<input type="password" placeholder="암호" name="userpw" /><br />
<input type="number" placeholder="나이" name="age" /><br />
<input type="text" placeholder="000-0000-0000" name="phone" /><br />
<input type="text" placeholder="성별(M/F)" name="gender" /><br />
<select name="role">
<option value="CUSTOMER">고객</option>
<option value="ADMIN">운영자</option>
<option value="SELLER">판매자</option>
</select><br />
<input type="submit" placeholder="회원가입" />
</form>
</body>
</html>
controller/MemberController.java 작성
package com.example.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.entity.Member;
import com.example.repository.MemberRepository;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
@RequestMapping(value = "/member")
public class MemberController {
@Autowired PasswordEncoder passwordEncoder;
@Autowired MemberRepository mRepository;
@GetMapping(value = "/join.do")
public String joinGET(){
return "member_join";
}
@PostMapping(value="/join.do")
public String joinPOST(@ModelAttribute Member member) {
member.setUserpw(
passwordEncoder.encode(member.getUserpw() ));
mRepository.save(member);
return "redirect:/";
}
}