簡體   English   中英

使用Spring Security進行授權和認證

[英]Authorization and Authentication with Spring Security

我有一個基於Spring構建的Web服務。 我目前正在使用Spring Security進行身份驗證,如下所示:

@Configuration
@EnableGlobalMethodSecurity(securedEnabled=true)
@EnableWebSecurity

public class ServerSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private Properties properties;

    private static final String ALL_URI = "/v1/**";
    private static final String HEALTH_URI = "/v1/healthCheck";

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterBefore(getFilter(), BasicAuthenticationFilter.class);
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        http.authorizeRequests()
                .antMatchers(HEALTH_URI).permitAll()
                .anyRequest().authenticated();
        http.csrf().disable();
    }

    private AuthenticationFilter getFilter() {
        return new AuthenticationFilter( properties.getKey());
    }
}

我的AuthenticationFilter類擴展AbstractAuthenticationProcessingFilter並執行實際的身份驗證。 如果我想將Authorization添加到我的安全性中,是否可以在AuthenticationFilter之外的attemptAuthentication方法中進行這些檢查? 還是有更好的方法呢? 據我了解,授權和身份驗證應獨立進行。 您首先進行身份驗證,然后再驗證權限。 因此,我認為有一種更好的方法在Spring Security中進行授權,而不僅僅是將其添加到attemptAuthentication方法中。

您需要AuthenticationProvider進行身份驗證,實現AuthenticationProvider並覆蓋authenticationsupports方法,然后注入AuthenticationManager

過濾器中的attemptAuthentication方法通常用於獲取authentication (例如, UsernamePasswordFilter從請求中獲取usernamepassword ,然后為AuthenticationManager構建UsernamePasswordAuthenticationToken ),

supports方法測試AuthenticationProvider是否可用於進行身份驗證。(例如DaoAuthenticationProvider支持UsernamePasswordAuthenticationToken

authenticate方法用於進行身份驗證(例如, DaoAuthenticationProvider通過用戶名獲取真實密碼,然后與用戶輸入進行比較),該方法應返回已通過Authentication (例如UsernamePasswordAuthenticationToken ),並且此身份驗證應包含用戶權限(此可以用於hasRole('xxx') ),或使用詳細信息等。

attemptAuthentication Authentication成功后, Authentication將設置為SecurityContextHolder 然后可以使用hasRole('xx')或其他方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM