如何在Spring Boot Security 2.0

时间:2018-06-16 00:33:47

标签: spring spring-boot spring-security

我的应用程序使用基本身份验证进行spring-data-rest访问(“/ api / **”下的所有内容)和使用UserDetailsS​​ervice进行面向API的客户端的JWT身份验证(本例中“/ component”下的所有内容)。在升级到Spring Boot 2之前,我完成了以下工作:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
    private UserDetailsService userDetailsService;
    private BCryptPasswordEncoder passwordEncoder;

    public SecurityConfig( UserDetailsService userDetailsService, BCryptPasswordEncoder passwordEncoder )
    {
        this.userDetailsService = userDetailsService;
        this.passwordEncoder = passwordEncoder;
    }

    @Override
    public void configure( AuthenticationManagerBuilder authenticationManagerBuilder ) throws Exception
    {
        authenticationManagerBuilder
                .userDetailsService( userDetailsService ).passwordEncoder( passwordEncoder )
                .and()
                .inMemoryAuthentication()
                .withUser( "rest" ).password( "something" ).authorities( "REST" ).roles( "REST" );
    }

    @Override
    protected void configure( HttpSecurity http ) throws Exception
    {
        http
                .cors()
                .and()
                .csrf().disable()
                .authorizeRequests()
                    .antMatchers( HttpMethod.POST, SecurityProperties.SIGN_UP_URL, SecurityProperties.LOGIN_URL ).permitAll()
                    .antMatchers( HttpMethod.GET, "/component1/**", "/component2/**", "/component3/**", "/component4/**" ).authenticated()
                    .antMatchers( HttpMethod.POST, "/component1/**", "/component2/**", "/component3/**", "/component4/**" ).authenticated()
                    .antMatchers( HttpMethod.GET, "/api/**" ).hasRole( "REST" )
                    .antMatchers( HttpMethod.OPTIONS, "/api/**" ).hasRole( "REST" )
                    .antMatchers( HttpMethod.PUT, "/api/**" ).hasRole( "REST" )
                    .antMatchers( HttpMethod.PATCH, "/api/**" ).hasRole( "REST" )
                    .antMatchers( HttpMethod.DELETE, "/api/**" ).hasRole( "REST" )
                .anyRequest().authenticated()
                .and()
                .httpBasic()
                .and()
                .addFilter( new JWTAuthenticationFilter( authenticationManager() ) )
                .addFilter( new JWTAuthorizationFilter( authenticationManager() ) )
                .addFilter( new BasicAuthenticationFilter( authenticationManager() ) );
    }
}

有一个单独的CORS内容配置,我现在并不关心,因为它之前工作正常,现在不是任何问题的根源。

因此,升级到Spring Boot Security 2后,我尝试将每种类型的安全性中的所有内容放在2个不同的WebSecurityConfigurerAdapter中,这将使其中一个工作,无论哪个具有较低的@Order(1)数。我在某种程度上遵循了这里的例子:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Security-2.0

我想知道我现在是否应该使用AuthenticationManagerBuilder来摆脱这个配置覆盖?或者将它们合并为一个文件?我不知道如何解决这个问题,有没有人有这方面的经验?

1 个答案:

答案 0 :(得分:0)

我今天回到这个。我放弃了整个多个WebSecurityConfigurerAdapter的东西,只是回到使用其中一个。已使用的Spring Security日志记录级别= DEBUG显示了一些容易修复的问题,该问题我不再支持Spring 5。