Spring Securityはキャラクター継承を実現します.
Spring Securityはキャラクター継承を実現します.
本論文では、Spring Securityに基づいて、キャラクターの継承がどのように行われるかを説明します.
パーミッション宣言
多くのアプリケーションはSpring Securityに基づいて認証プロセスを実現するために、通常はいくつかのキャラクターを定義する必要があります.これらのキャラクターは優先度や階層関係があるかもしれません.仮に私たちは三つのキャラクターがあるとします.ADMIN、MODERATOR、USER.
以下のコードは権限声明を行います.
キャラクター継承を実現
キャラクター継承を実現するには、次の2つのステップが必要です.定義bean RoleHerchy 定義expressitionhandlerリーダーシップ 例示的な構成コード: ADMINはMODERATORとUSERのキャラクター権限にアクセスできます. MODERATORはUSERキャラクターにアクセスできます. USER及びMODERATORキャラクターにアクセスできなく、ADMINキャラクター権限にもアクセスできません.
締め括りをつける
キャラクターの継承により、キャラクターとキャラクターの権限の設定と管理がより簡単になります.
本論文では、Spring Securityに基づいて、キャラクターの継承がどのように行われるかを説明します.
パーミッション宣言
多くのアプリケーションはSpring Securityに基づいて認証プロセスを実現するために、通常はいくつかのキャラクターを定義する必要があります.これらのキャラクターは優先度や階層関係があるかもしれません.仮に私たちは三つのキャラクターがあるとします.ADMIN、MODERATOR、USER.
以下のコードは権限声明を行います.
@Secured(['MODERATOR'])
def dashBoard(){
render(view: 'dashBoard')
}
私たちは注釈でキャラクターの訪問を制限しているのを見ました.ADMINユーザーにも訪問したいなら、キャラクター声明を追加する必要があります.@Secured(['ADMIN','MODERATOR'])
これは需要を実現することができますが、私たちのシステムにはこのような場面が多いので、このような方式を採用するのはくどいです.キャラクター継承を実現
キャラクター継承を実現するには、次の2つのステップが必要です.
import org.springframework.context.annotation.Bean;
import org.springframework.security.access.expression.SecurityExpressionHandler;
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.FilterInvocation;
import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler;
@EnableWebSecurity
public class SpringSecurityConfigurer extends WebSecurityConfigurerAdapter{
private SecurityExpressionHandler webExpressionHandler() {
DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
defaultWebSecurityExpressionHandler.setRoleHierarchy(roleHierarchy());
return defaultWebSecurityExpressionHandler;
}
@Bean
public RoleHierarchy roleHierarchy(){
RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
roleHierarchy.setHierarchy("ADMIN > MODERATOR > USER");
return roleHierarchy;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("ekansh")
.password("password")
.authorities("USER", "ROLE");
auth.inMemoryAuthentication()
.withUser("admin")
.password("admin")
.authorities("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.expressionHandler(webExpressionHandler())
.antMatchers("/admin/**").hasAuthority("ADMIN")
.antMatchers("/user/**").hasAuthority("USER")
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.logout()
;
}
}
上記の例では、キャラクターの継承関係は以下の通りです.締め括りをつける
キャラクターの継承により、キャラクターとキャラクターの権限の設定と管理がより簡単になります.