JAVA Developer Training
36. Spring (멤버 등록) 본문
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;
}
}
'트레이닝' 카테고리의 다른 글
38. Spring (상품,멤버를 이용한 sellerController) (0) | 2021.10.06 |
---|---|
37. Spring (아이템,상품 등록) (0) | 2021.10.06 |
35. Spring ( 게시글 이전글, 다음글, 조회수 ) -2 (0) | 2021.09.29 |
34. Spring (게시글 수정,삭제) - 1 (0) | 2021.09.29 |
34. Spring ( 게시글 이미지 등록, 조회 ) (0) | 2021.09.27 |