Как обеспечить настраиваемую конфигурацию безопасности для oauth2 с помощью spring-boot 1.3.0.RC1
С выпуском Spring-Cloud Angel.SR3 я последовал примеру в https://github.com/spring-cloud-samples/sso и все отлично работает с spring-boot 1.2.6.RELEASE.
Однако в spring-boot 1.3.0.RC1 материал oauth2 переместился в саму spring-boot, и приведенный ниже код не может быть скомпилирован, так как класс OAuth2SsoConfigurerAdapter больше не существует.
Что такое Spring-Boot единственный способ создать эквивалентную конфигурацию?
public static void main(String[] args) {
SpringApplication.run(MainAppApplication.class, args);
}
...
@Component
public static class LoginConfigurer extends OAuth2SsoConfigurerAdapter {
@Override
public void match(RequestMatchers matchers) {
matchers.antMatchers("/dashboard/**");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.antMatcher("/dashboard/**").authorizeRequests().anyRequest()
.authenticated().and().csrf()
.csrfTokenRepository(csrfTokenRepository()).and()
.addFilterAfter(csrfHeaderFilter(), CsrfFilter.class);
}
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
...
};
}
...
}
2 ответа
Вы просто должны использовать org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
и внимательно используйте эту аннотацию org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso
Я написал внимательно, потому что его поведение зависит от того, где вы его добавили. Как указано в Javadoc:
Включите единый вход OAuth2 (SSO). Если существует существующий WebSecurityConfigurerAdapter, предоставленный пользователем и помеченный @EnableOAuth2Sso, он расширяется путем добавления фильтра аутентификации и точки входа аутентификации. Если у пользователя есть только @EnableOAuth2Sso, но нет в WebSecurityConfigurerAdapter, то он добавляется со всеми защищенными путями и с порядком, который ставит его перед цепью безопасности HTTP Basic по умолчанию в Spring Boot.
Надеюсь, это поможет!
Оказывается, не нужен специальный адаптер, просто обычный WebSecurityConfigurerAdapter делает свое дело. Вы не можете сказать код снизу, если oauth2 SSO задействован, более прозрачный, вроде как говорить.
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Autowired
private SecurityProperties security;
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.authorizeRequests()
.antMatchers("/", "/ssologout").permitAll()
.anyRequest().fullyAuthenticated()
.and()
.formLogin()
.loginPage("/login").failureUrl("/login?error")
.permitAll()
.and()
.logout().permitAll();
// @formatter:on
}
}