如何使用spring-boot 1.3.0.RC1为oauth2提供自定义安全性配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用spring-boot 1.3.0.RC1为oauth2提供自定义安全性配置相关的知识,希望对你有一定的参考价值。

随着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() {
    ...
        };
    }

    ...

}
答案

你只需要使用org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter并仔细使用这个注释org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso

我写得很仔细,因为它的行为取决于你添加它的位置。正如javadoc中所述:

启用OAuth2单点登录(SSO)。如果用户提供了现有的WebSecurityConfigurerAdapter并使用@ EnableOAuth2Sso进行了注释,则会通过添加身份验证过滤器和身份验证入口点来增强它。如果用户只有@ EnableOAuth2Sso而不是WebSecurityConfigurerAdapter,则会添加一个安全路径,并且命令会使其超越Spring Boot中的默认HTTP Basic安全链。

希望有所帮助!

另一答案

原来不需要特殊的适配器,只需常规的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
    }

}

以上是关于如何使用spring-boot 1.3.0.RC1为oauth2提供自定义安全性配置的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有spring-boot的情况下使用eureka+feign?

如何避免使用 Spring-Boot 下载嵌入式 MongoDb

如何使用 jpa/spring-boot 正确应用类似 PrePersist 的逻辑

如何使用 Spring-Boot 播种 Spring-Security

如何在 spring-boot 中禁用 spring-data-mongodb 自动配置

如何在 IDEA Intellij 上使用 Spring-boot 进行自动重新加载