Spring - SaltSource为null

时间:2016-05-18 11:39:49

标签: java spring-security spring-boot

我使用的是Spring Security和Spring Boot。我也使用了UserDetails和UserDetailsS​​ervice。

当执行传递到DaoAuthenticationProvider类和方法additionalAuthenticationChecks(...)时,SaltSource为空。

你知道为什么吗?也许需要配置?

THX。

2 个答案:

答案 0 :(得分:1)

您必须设置盐源。例如,请参阅此问题作为可能的方法:https://stackoverflow.com/a/26149525/185031

答案 1 :(得分:1)

需要配置SaltSource。您可以使用其中一个可用的实现:SystemWideSaltSource或ReflectionSaltSource。

如果选择ReflectionSaltSource,则必须指定UserDetails的哪个属性将用于salt。您可以使用UserDetails实现的任何现有属性(即用户名)或特定的盐场。

从安全角度来看,您应该更好地考虑安全生成的随机盐。在这种情况下,BCryptPasswordEncoder为您完成工作(生成salt并使用密码存储它)。

以下是here找到的示例配置。 在XML中:

  <bean id="authProvider" 
    class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <property name="userDetailsService" ref="customUserService" />
    <property name="passwordEncoder" ref="encoder" />
  </bean>

  <bean id="encoder" 
    class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

在java中:

auth.jdbcAuthentication().dataSource(dataSource)
            .passwordEncoder(passwordEncoder())
            .usersByUsernameQuery("sql...")
            .authoritiesByUsernameQuery("sql...");