2016-03-07 97 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在這是如何完成