권한은 User(일반 사용자) , Admin(관리자 사용자) 총 두개로 나눠

로그인하여 인증 된 일반 사용자에게 물건을 구매할 수 있도록 권한을 주었고

관리자는 사이트 페이지, 카테고리, 상품 수정 권한을 주었습니다.

 

 

1. User 유저

 

User 클래스에 UserDetails(사용자 정보를 담은 인터페이스)를  implements (상속) 하고 

어노테이션 추가한 것들

@Entity
@Table(name="users")
@Data 

 

 

상속 extends, implements 차이
extends : 부모의 메소드,변수 그대로 사용가능
implements : 부모 메소드를 꼭 재정의 오버라이드 해야함

 

 

 

 

- UserDetails  상속받는데 add unimplemented methods 자동생성하기

자동생성 추가 후 자동완성 된 코드

더보기

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
   // TODO Auto-generated method stub
   return null;
}

패스워드와 유저네임은 삭제하기
@DATA 로 get,set 메서드를 자동으로 만들어주기 때문에 필요없음

@Override
public String getPassword() {
// TODO Auto-generated method stub
return null;
}

@Override
public String getUsername() {
// TODO Auto-generated method stub
return null;
}


@Override
public boolean isAccountNonExpired() {
  // TODO Auto-generated method stub
  return false;
}

@Override
public boolean isAccountNonLocked() {
  // TODO Auto-generated method stub
  return false;
}

@Override
public boolean isCredentialsNonExpired() {
  // TODO Auto-generated method stub
  return false;
}

@Override
public boolean isEnabled() {
  // TODO Auto-generated method stub
  return false;
}

 

 

 

 

 

- User 클래스에 warning뜨는데 serial version ID 추가하기

 

추가하니 자동완성 된 코드.

private static final long serialVersionUID = 1L;

 

유저와 어드민의 serialVersionUID 차이
user 의 serialVersionUID = 1L
admin 의 serialVersionUID = 2L

 

 

 

@Entity
@Table(name = "users") //DB의 users테이블과 이름같도록
@Data
public class User implements UserDetails{

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) 
	private int id;
	
	private String username;

	private String password;

	private String email;
	
	@Column(name = "phone_number")
	private String phoneNumber;

 

DB에서 Id 자동생성 하는 어노테이션

@Id와 @GeneratedValue를 같이 사용한다.

@id
@GeneratedValue(strategy = GenerationType.IDENTITY) 

 

 

 

☆ 유저 권한만 주기 ☆

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    //권한 목록을 리턴(유저 권한)
    return Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"));
}

@Override
public boolean isAccountNonExpired() {
    // 계정이 만료 되지 않았나요?
    return true; //만료안됨
}

@Override
public boolean isAccountNonLocked() {
    // 계정이 잠겨있지 않나요?
    return true; //잠기지 않음
}

@Override
public boolean isCredentialsNonExpired() {
    // 비밀번호가 만료되지 않았나요?
    return true; //만료안됨
}

@Override
public boolean isEnabled() {
    // 사용 가능한 계정인가요?
    return true; //사용가능
}

 

 

validation 적용하기

@NotBlank @Size(min = 2, message = "유저네임을 2자 이상")
private String username;

@NotBlank @Size(min = 4, message = "패스워드는 4자 이상")
private String password;

//DB에는 없고 패스워드 확인용
@Transient
private String confirmPassword;

@Email(message = "이메일 양식에 맞게 입력")
private String email;

@Column(name = "phone_number")
@Size(min = 6, message = "전화번호 6 이상")
private String phoneNumber;

 

@Email  이메일 양식이 맞는지 유효성 검사

@Transient : 실제 DB에는 없지만 패스워드 확인용이라서 패스워드와 같다.

 

 

 


2. Admin 관리자 

 

@Entity
@Table(name = "admin")
@Data
public class Admin implements UserDetails{

    private static final long serialVersionUID =2L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //DB에서 id자동생성
    private int id;

    private String username;
    
	private String password;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        //권한 목록을 리턴(관리자 권한)
        return Arrays.asList(new SimpleGrantedAuthority("ROLE_ADMIN"));
    }

    @Override
    public boolean isAccountNonExpired() {
        // 계정이 만료 되지 않았나요?
        return true; //만료안됨
    }

    @Override
    public boolean isAccountNonLocked() {
        // 계정이 잠겨있지 않나요?
        return true; //잠기지 않음
    }

    @Override
    public boolean isCredentialsNonExpired() {
        // 비밀번호가 만료되지 않았나요?
        return true; //만료안됨
    }

    @Override
    public boolean isEnabled() {
        // 사용 가능한 계정인가요?
        return true; //사용가능
    }

 

 

관리자는 1~2명이니까 유효성검사 따로 필요하지 않을 것 같아서 안씀.

반응형
LIST

+ Recent posts