【问题标题】:Spring security 4 custom jdbc authenticationSpring Security 4 自定义 jdbc 身份验证
【发布时间】:2016-03-07 06:46:36
【问题描述】:
我正在使用 spring boot、spring mvc 4、spring security 4 和 mysql 作为新 Web 应用程序的数据存储,我有两个问题
之前没用过spring security,但是看到之后,有个疑问是关于用来查找用户权限的查询:为什么用username而不是user id。我的意思是根据用户 ID 搜索权限要快得多,并且可以在将来更改用户名。我试图重载 usersByUsernameQuery 和 authorityByUsernameQuery 但使用用户 id 但它不起作用(即使它起作用,该方法的名称也困扰着我)..所以请有人向我解释他们为什么使用用户名?
1234563在 Spring 中 .. 加密的 salt 部分也是如此,Spring 内部知道如何使用它,所以我不应该担心迭代次数、成本和 salt 存储?
【问题讨论】:
标签:
spring-mvc
spring-security
spring-jdbc
【解决方案1】:
1) 我不明白这个问题,因为如果你必须找到一个名为“Quentin”的用户的权限,你怎么知道“Quentin”的 id ?
请查看我在登录时用于检索用户的查询
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT username, password, CASE enabled WHEN 1 THEN 'true' ELSE 'false' END 'enabled' FROM users WHERE BINARY username=?"
authorities-by-username-query="SELECT username, authority FROM users WHERE BINARY username=?"
id="jdbcUserService" />
<password-encoder ref="passwordEncoder" hash="bcrypt" />
</authentication-provider>
</authentication-manager>
<beans:bean id="passwordEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
2) salt 与密码一起保存。有一个惊人的解释 here 这是如何完成的