스프링 시큐리티 authorities 와 role

김성지·2022년 8월 27일
4

그냥공부

목록 보기
2/10

userdetails

userDetatils 구현한 org.srpingframework.security.core.userdetails.User를 보자

보면

이렇게 구현되어 있다.

userDetails를 implement 할라면

getAuthorities()를 구현해야 되는데

이부분이 잘 이해가 안갔었다

GrantedAuthority

GrantedAuthority 는 인터페이스이며

구현체가 총 3개잇다.

그중 simple 을 보자

public final class SimpleGrantedAuthority implements GrantedAuthority {

	private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;

	private final String role;

	public SimpleGrantedAuthority(String role) {
		Assert.hasText(role, "A granted authority textual representation is required");
		this.role = role;
	}

	@Override
	public String getAuthority() {
		return this.role;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj instanceof SimpleGrantedAuthority) {
			return this.role.equals(((SimpleGrantedAuthority) obj).role);
		}
		return false;
	}

	@Override
	public int hashCode() {
		return this.role.hashCode();
	}

	@Override
	public String toString() {
		return this.role;
	}

}

String 타입인 role 변수 하나만 잇다

authority 와 role 의 관계는

https://stackoverflow.com/questions/19525380/difference-between-role-and-grantedauthority-in-spring-security

여기서 확인햇다..

SecurityExpressionOperations 에서의 authorities

초록색 글씨에 적혀잇듯이

hasRole은 앞에 "ROLE_" 이 붙고
hasAuthority는 String 생으로 들어간다

그래서 userdetails를 구현한 객체를 디스크나 메모리에 올려둘 때

이 배열에 ROLE_ 을 앞에 붙이느냐 마냐에 따라서
ROLE과 Authority가 갈린다

0개의 댓글

관련 채용 정보