Spring/additional

[Spring Security] UserDetails & GrantedAuthority

sujin7837 2021. 2. 14. 20:07
반응형

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의 생성자 파라미터에 넣어주면 됩니다. 이것으로 권한 객체 생성은 끝이 납니다.

 

 

출처: zgundam.tistory.com/49#recentEntries

반응형