2016-03-07 106 views
0

我使用的是春天开机,Spring MVC的4,春季安全4和MySQL作为一个新的Web应用程序我的数据存储和我有两个问题春季安全4自定义JDBC认证

  1. 我从来之前使用过spring security,但在看到它之后,我对用于查找用户权限的查询有疑问:为什么它使用的是用户名而不是用户标识。我的意思是根据用户ID搜索权限要快得多,并且能够在将来更改用户名。我试图重载usersByUsernameQuery和authoritiesByUsernameQuery,但使用用户ID,但它不起作用(即使它的工作,该方法的名称是窃听我)..所以请有人向我解释他们为什么使用用户名?

  2. 在我以前的php web应用程序中,如果我们想要使用BCrypt,我们曾经将盐和密码一起存储在数据库中。但是我注意到不需要在此列中Spring ..加密的盐份也是如此,Spring内部知道如何使用它,所以我不必担心迭代次数,成本和盐的存储量。

+1

当时的一个问题,请。 – holmis83

回答

0

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)盐与密码一起保存到检索用户。有一个惊人的解释here在这是如何完成