Как обеспечить настраиваемую конфигурацию безопасности для 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
    }

}
Другие вопросы по тегам