基於SpringSecurity實現RBAC權限控制(待完善)

Spring Security是一個企業應用系統提供聲明式的安全訪問控制功能,減小爲企業應用系統安全控制而編寫的大量重複代碼git

認證:github

spring security的原理就是使用不少的攔截器對URL進行攔截,以此來管理用戶登陸和受權,用戶登陸時,會被AuthenticationProcessingFilter攔截,經過ProviderManager來對用戶信息進行驗證,若是驗證經過後會將用戶的權限信息封裝User放到SecurityContextHolder中,以備後面訪問資源時使用。spring

咱們要自定義用戶的校驗機制的話,只要實現AuthenticationProvider,將他注入到配置類中安全

受權:ide

基於RBAC的權限控制,RBAC通常都是由 3部分組成,用戶,角色 ,資源(菜單,按鈕),而後就是用戶和角色的關聯表,角色和資源的關聯表核心就是判斷當前用戶所擁有的URL是否和當前訪問的URL是否匹配ui

 

Spring Security配置url

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private AuthenticationProvider provider;

    @Autowired
    private AuthenticationSuccessHandler myAuthenticationSuccessHandler;
    
    @Autowired
    private AuthenticationFailureHandler myAuthenticationFailHander;
    
    //注入咱們本身的AuthenticationProvider
    @Override
    protected void configure(HttpSecurity http) throws Exception {
           http 
           //表示表單登陸的url是/login,表單提交的url是/login/form
           //myAuthenticationSuccessHandler   登陸成功處理器
           //myAuthenticationFailHander   登陸失敗處理器
          .formLogin().loginPage("/login").loginProcessingUrl("/login/form")
          .successHandler(myAuthenticationSuccessHandler)
          .failureHandler(myAuthenticationFailHander)
          .permitAll() 
          //permitAll()表示容許訪問/login,/login/form
          .and()
          //設置受權請求,任何請求都要通過下面的權限表達式處理
          .authorizeRequests()
          .anyRequest().access("@rbacService.hasPermission(request,authentication)") //權限表達式          
          .and()
          //在Security的默認攔截器裏,默認會開啓CSRF處理,判斷請求是否攜帶了token,若是沒有就拒絕訪問,因此這裏要關閉CSRF處理
          .csrf().disable();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
          auth.authenticationProvider(provider);
    }
    
}

 

github下載地址:https://github.com/jake1263/SpringSecurityspa

相關文章
相關標籤/搜索