반응형
UserDetails(계정 클래스)
Spring Security에서 계정 객체를 자바로 정의하기 위해서는 org.springframework.security.core.userdetails.UserDetails 인터페이스를 이해해야 합니다. 이 인터페이스를 구현한 클래스를 Spring Security에서는 사용자라고 보고 작업을 하게 됩니다.
return 타입 | 메소드명 | 설명 |
String | getUsername() | 계정의 이름을 리턴합니다. |
String | getPassword() | 계정의 비밀번호를 리턴합니다. |
boolean | isAccountNonExpired() | 계정이 만료되지 않았는지를 리턴합니다.(true: 만료되지 않음) |
boolean | isAccountNonLocked() | 계정이 잠겨있지 않은지를 리턴합니다.(true: 계정이 잠겨있지 않음) |
boolean | isCredentialsNonExpired() | 계정의 비밀번호가 만료되지 않았는지를 리턴합니다.(true: 패스워드가 만료되지 않음) |
boolean | isEnabled() | 계정이 사용 가능한지를 리턴합니다.(true: 사용 가능한 계정임) |
Collection<? extends GrantedAuthority> | getAuthorities() | 계정이 가지고 있는 권한 목록을 리턴합니다. |
-Spring Security에서는 username을 id로 사용합니다. 즉, 계정의 이름이란 우리가 흔히 사용하는 로그인 id라고 생각할 수 있습니다.
-계정 클래스를 설계할 때 업무적인 용도 때문에 계정 사용자의 이름, 성별, 주소 등 여러가지 멤버변수를 넣게 될 수 있습니다. 그런 경우 계정 클래스는 UserDetails 인터페이스를 구현한 클래스로 설계하고 설명에 맞게 각 메소드를 구현해주어야 합니다.
public class UserInfo implements UserDetails {
private static final long id=-408683898982938L;
private String id; //계정의 아이디
private String name; //계정 사용자의 이름
private String password; //계정의 비밀번호
private Set<GrantedAuthority> authorities; //계정이 가지고 있는 권한 목록
public MemberInfo(String id, String name, String password, Collection<? extends GrantedAuthority> authorities) {
this.id=id;
this.name=name;
this.password=password;
this.authorities=Collections.unmodifiableSet(sortAuthorities(authorities));
}
public String getId() {
return id;
}
public void setId(String id) {
this.id=id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public void setPassword(String password) {
this.password=password;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities;
}
public void setAuthorities(Collection<? extends GrantedAuthority> authorities) {
this.authorities=Collections.unmodifiableSet(sortAuthorities(authorities));
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUsername() {
return getId();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
.
.
.
.
(코드 생략)
.
.
.
.
}
GrantedAuthority(권한 클래스)
Spring Security에서 권한 객체는 org.springframework.security.core.GrantedAuthority 인터페이스를 구현한 클래스 객체로 만들면 됩니다.
SimpleGrantedAuthority
-위의 인터페이스를 구현한 클래스 중 하나입니다.
-org.springframework.security.core.authority.SimpleGrantedAuthority 클래스
-권한을 저장하기 위해서는 저장하고자 하는 권한 문자열 값을 SimpleGrantedAuthority의 생성자 파라미터에 넣어주면 됩니다. 이것으로 권한 객체 생성은 끝이 납니다.
반응형
'Spring > additional' 카테고리의 다른 글
[Spring] 스프링이 사랑한 디자인 패턴2 (0) | 2021.02.21 |
---|---|
[Spring] 스프링이 사랑한 디자인 패턴1 (0) | 2021.02.17 |
[Spring] Builder 패턴(Lombok 활용) (0) | 2021.02.14 |
[Spring] Claim 기반 권한 부여 (0) | 2021.02.14 |
[Spring] spring data jpa between (0) | 2021.01.29 |