회원 가입 Security 권한 설정

HUGO·2022년 10월 7일
0

JPA

목록 보기
5/6

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:/";
        
        
    }
}
profile
갓 신생아 개발자 이야기

0개의 댓글