使用auth.inMemoryAuthentication()或auth.userDetailsS​​ervice(userDetailsS​​ervice())时

时间:2017-08-24 21:00:44

标签: spring spring-security

我正在使用Spring Security

关于配置,我通过一些来源看到了以下两种方法:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication().withUser("someuser").password("somepassword").authorities("ROLE_ADMIN", "ROLE_USER");
    //more as above
}

两个

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService());
}

@Bean
@Override
public UserDetailsService userDetailsService() {
    InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
    inMemoryUserDetailsManager.createUser(User.withUsername("someuser").password("somepassword").authorities("ROLE_ADMIN", "ROLE_USER").build());
    //more as above
    return inMemoryUserDetailsManager;
}

直到这里,目的或目标是为内存中的某些用户创建开发。实际上 工作。因此:

  • 当一个选项是强制性的而不是另一个?

1 个答案:

答案 0 :(得分:2)

第二种变体更通用,因此更灵活,并使用org.springframework.security.config.annotation.authentication.configurers.userdetails.DaoAuthenticationConfigurer注册。它接受您选择内存中标准实现的任何UserDetailsProvider。

第一个更紧凑,因为InMemoryUserDetailsManagerConfigurer是标准的。

但最终结果是相同的,因为org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder#apply被调用:它接受三种类型:DAO(你的第二个),内存中(你的第一个)和JDBC配置器。