Spring Security - 인가 API ExpressionUrlAuthorizationConfigurer

목차

인가 API

ExpressionUrlAuthorizationConfigurer 를 통해 자원에 접근하기 위한 다양한 인가 방식을 지원한다.
역할(ROLE) 기반 인가 방식, 권한(Authority) 기반 인가 방식, IP 를 통한 인가 방식등 다양한 API를 제공한다.

  • hasRole
    • 명시된 권한에 접미사 ROLE_ 을 붙이고 해당 권한을 가진 사용자만 자원에 접근을 허용한다.
    • hasAuthority 와 비슷한 개념이지만 hasRole 은 USER, MANAGER, ADMIN과 같은 역할 에 따라 자원에 대한 접근을 허용한다.
  • hasAnyRole
    • 명시된 권한들에 접미사 ROLE_ 을 붙이고 사용자가 하나라도 권한을 갖고 있으면 해당 자원에 대한 접근을 허용한다.
  • hasAuthority
    • 해당 권한을 가진 사용자만 자원에 접근을 허용한다.
    • hasRole 와 비슷한 개념이지만 hasAuthority는 CREATE, READ, WRITE, DELETE 와 같이 권한 에 따라 자원에 대한 접근을 허용한다.
  • hasAnyAuthority
    • 명시된 권한들 중 하나라도 권한이 있는 사용자만 자원에 접근을 허용한다.
  • hasIpAddress
    • 특정 IP 에 대해 자원에 대한 접근을 허용할 때 사용한다.
  • permitAll
    • 권한에 대한 검증 없이 자원에 대한 접근을 허용한다.
  • anonymous
    • 익명 사용자의 접근을 허용
    • 익명 사용자는 기본적으로 ROLE_ANONYMOUS 권한이 부여돼 있다.
  • rememberMe
    • Remember-Me 를 통해 인증된 사용자가 자원에 대한 접근을 허용한다.
  • denyAll
    • 모든 접근을 허용하지 않는다.
  • authenticated
    • 인증된 사용자만 자원에 대한 접근을 허용한다.
  • fullyAuthenticated
    • Remember-Me 를 통해 인증된 사용자를 제외하고 인증된 사용자에 대한 접근을 허용한다.

ExpressionUrlAuthorizationConfigurer

public ExpressionInterceptUrlRegistry hasRole(String role) {
return access(ExpressionUrlAuthorizationConfigurer
.hasRole(ExpressionUrlAuthorizationConfigurer.this.rolePrefix, role));
}

public ExpressionInterceptUrlRegistry hasAnyRole(String... roles) {
return access(ExpressionUrlAuthorizationConfigurer
.hasAnyRole(ExpressionUrlAuthorizationConfigurer.this.rolePrefix, roles));
}

public ExpressionInterceptUrlRegistry hasAuthority(String authority) {
return access(ExpressionUrlAuthorizationConfigurer.hasAuthority(authority));
}

public ExpressionInterceptUrlRegistry hasAnyAuthority(String... authorities) {
return access(ExpressionUrlAuthorizationConfigurer.hasAnyAuthority(authorities));
}

public ExpressionInterceptUrlRegistry hasIpAddress(String ipaddressExpression) {
return access(ExpressionUrlAuthorizationConfigurer.hasIpAddress(ipaddressExpression));
}

public ExpressionInterceptUrlRegistry permitAll() {
return access(permitAll);
}

public ExpressionInterceptUrlRegistry anonymous() {
return access(anonymous);
}

public ExpressionInterceptUrlRegistry rememberMe() {
return access(rememberMe);
}

public ExpressionInterceptUrlRegistry denyAll() {
return access(denyAll);
}

public ExpressionInterceptUrlRegistry authenticated() {
return access(authenticated);
}

public ExpressionInterceptUrlRegistry fullyAuthenticated() {
return access(fullyAuthenticated);
}

public ExpressionInterceptUrlRegistry access(String attribute) {
if (this.not) {
attribute = "!" + attribute;
}
interceptUrl(this.requestMatchers, SecurityConfig.createList(attribute));
return ExpressionUrlAuthorizationConfigurer.this.REGISTRY;
}
Share