在Spring Security中配置“记住我”选项时出错

时间:2018-07-02 10:44:28

标签: java spring-boot spring-security remember-me

我正在尝试在我的Web项目中启用“记住我”功能。

这是我正在使用的Spring Security配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/css/**").permitAll()
                .antMatchers("/signup").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login").permitAll()
                .and()
                .logout().permitAll()
                .and()
                .rememberMe()
        ;
    }
}

在登录页面中,我为此选项添加了一个复选框:

<input type="checkbox" name="remember-me" id="remember-me"/>

当我尝试检查登录时选中“记住我”框时,出现此异常:

java.lang.IllegalStateException: UserDetailsService is required.

我的配置出了什么问题?

注意:我正在使用Spring Boot v2.0.3.RELEASE(Spring Security v5.x)


更新,我尝试遵循this answer建议的解决方案,并解决了通过以下方式更改配置的问题:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                // ... other configurations...
                .rememberMe().userDetailsService(userDetailsService)
        ;
    }
}

但这不能解释为什么以前的配置不起作用。

RememberMeConfigurer.userDetailsService()中,javadoc的解释清楚:

  

默认是使用通过调用AbstractConfiguredSecurityBuilder.getSharedObject(Class)找到的UserDetailsS​​ervice,该类是在使用WebSecurityConfigurerAdapter.configure(AuthenticationManagerBuilder)时设置的。

而且我的UserDetailsService实现带有@Component的注释,因此我希望可以在应用程序上下文中找到它。

那么,出于好奇,有人可以解释一下原始配置的实际问题是什么吗?

0 个答案:

没有答案