我的应用程序使用基本身份验证进行spring-data-rest访问(“/ api / **”下的所有内容)和使用UserDetailsService进行面向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来摆脱这个配置覆盖?或者将它们合并为一个文件?我不知道如何解决这个问题,有没有人有这方面的经验?
答案 0 :(得分:0)
我今天回到这个。我放弃了整个多个WebSecurityConfigurerAdapter的东西,只是回到使用其中一个。已使用的Spring Security日志记录级别= DEBUG显示了一些容易修复的问题,该问题我不再支持Spring 5。