簡體   English   中英

如何使用Spring HttpSecurity沒有formLogin

[英]How to use Spring HttpSecurity without formLogin

我有這樣的SecurityConfig:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private AuthProviderByIP authProvider;

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

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/public").permitAll()
            .antMatchers("/private").hasRole("ADMIN")
            .antMatchers("/**").permitAll();
}

}

和AuthProviderByIP像這樣:

@Component
public class AuthProviderByIP implements AuthenticationProvider {

@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
// making own Authentication object
}

@Override
public boolean supports(Class<?> aClass) {
    return true;
}

}

當我嘗試獲取/ public資源時,它工作正常,但是當嘗試獲取/ private資源時,它僅返回禁止頁面。 我用debug檢查過它,甚至沒有調用authenticate(...)方法。

谷歌搜索時只有HttpSecurity配置.formLogin()。and()。httpBasic()

但是我現在不需要formLogin。 如何不使用formLogin進行配置?

Spring Security將Authentication對象存儲在SecurityContextHolder 如果您不希望表單登錄或基本身份驗證,請手動進行設置。 文檔

Authentication request = new UsernamePasswordAuthenticationToken(name, password);
Authentication result = authenticationManager.authenticate(request);
SecurityContextHolder.getContext().setAuthentication(result);

您可以在HttpSecurity配置中禁用Form-Login和Basic-Auth:

@Override
protected void configure(HttpSecurity http) throws Exception {
http
    ...
    .httpBasic().disable()
    .formLogin().disable();
}

暫無
暫無

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

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