Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

JAVA Developer Training

36. Spring (멤버 등록) 본문

트레이닝

36. Spring (멤버 등록)

Romenest 2021. 10. 6. 16:27

1. 멤버 엔티티 생성 Member

package com.example.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.CreationTimestamp;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonProperty.Access;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Entity
@Getter
@Setter
@NoArgsConstructor
@ToString
@Table(name="MEMBER")
public class Member {
    
    @Id
    @Column(name="EMAIL", length = 100)
    private String email;

    @Column(name="PASSWORD")
    @JsonProperty(access = Access.WRITE_ONLY)
    private String passwd;

    @Transient
    private String passwd1;

    @Column(name="NAME")
    private String name;

    @Column(name="ROLE")
    private String role;

    @CreationTimestamp
    @Column(name="REGDATE", updatable = false)
    private Date regdate;
}

2. 멤버 저장소 생성    MemberRepository

package com.example.repository;

import com.example.entity.Member;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MemberRepository extends JpaRepository<Member, String> {
    
}

3. 멤버 서비스 생성 (인터페이스 - 틀) MemberService

package com.example.service;

import com.example.entity.Member;

//구현x 정의o
public interface MemberService {

    //회원 일괄추가
    public void queryMemberBatch(String email);

    //회원가입
    public void joinMember(Member member);

    //회원정보 가져오기
    public Member getMemberOne(String email);

    //비밀번호 변경
    public void updatePasswd(Member member);

    //회원탈퇴
    public void deleteMember(String email);
    
}

4. 멤버 서비스 기능 상세 정의 MemberServiceImpl

package com.example.service;

import java.util.Optional;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

import com.example.entity.Member;
import com.example.repository.MemberRepository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MemberServiceImpl implements MemberService {

    @Autowired
    MemberRepository mRepository;

    @Autowired
    EntityManagerFactory emf;

    // 회원정보 일괄 추가 , 수정, 삭제 가능
    // 트렌젝션 ( 무도 추가되거나 , 모두 추가되지않거나 해야함 )
    public void queryMemberBatch(String email) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        for (int i = 0; i < 1000; i++) {
            // mRepository.save();
        }
        em.getTransaction().commit();

    }

    // 회원가입
    public void joinMember(Member member) {
        mRepository.save(member);
    }

    // 회원정보 가져오기
    public Member getMemberOne(String email) {
        Optional<Member> member = mRepository.findById(email);
        return member.orElse(null); // 없으면 null을 리턴
    }

    // 비밀번호 변경
    public void updatePasswd(Member member) {
        mRepository.save(member);
    }

    public void deleteMember(String email) {

    }

}

5. 멤버 디테일 서비스 MemberDetalisService

package com.example.service;

import java.util.Collection;

import com.example.entity.Member;
import com.example.repository.MemberRepository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

//시큐리티에서 로그인 시 DetailsService 클래스가 호출됨
//메소드 loadUserByUsername 이 자동으로 호출됨
//여기에 필요한 기능을 구현하고 User를 리턴시킨
@Service
public class MemberDetailsService implements UserDetailsService {

    @Autowired
    MemberRepository mRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Member member = mRepository.findById(username).get();

        //String의 권한을 Collection<>으로 변환
        String[] role = {member.getRole()};
        Collection<GrantedAuthority> roles = AuthorityUtils.createAuthorityList(role);

        User user = new User(member.getEmail(),
        member.getPasswd(), roles);

        return user;
    }
    
}