2015-01-05 80 views
0

我已閱讀以下文章:春季安全取決於價值取代通配符?

jdbc-user-service-based-spring-security-example

Spring配置:

<authentication-manager alias="authenticationManager"> 
    <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 TBL_USERS 
     WHERE USERNAME=?;" 

     authorities-by-username-query=" 
     SELECT u.USERNAME, r.ROLENAME 
     FROM TBL_USERS u, TBL_USER_ROLE r 
     WHERE u.ID = r.USERID 
     AND u.USERNAME=?;" 

     /> 
    </authentication-provider> 
</authentication-manager> 

讓研究下面的代碼片段:

users-by-username-query=" 
      SELECT USERNAME, PASSWORD, CASE ENABLED WHEN 1 THEN 'true' ELSE 'false' END 'ENABLED' 
      FROM TBL_USERS 
      WHERE USERNAME=?;" 

我的理解下面的查詢查詢所有用戶都可以登錄。
據我瞭解,這是像準備好的聲明。但是,當我們用事先準備好的聲明,我們寫somethng這樣的:

preparedStatement.setString(1, "John"); 

我不明白的地方春天需要USERNAME值來代替?

回答

1

的用戶名是當你進行身份驗證所提交的一個,隨後傳遞到UserDetailsService。如果你看the code for the JDBC version,你可以看到實際替代發生在哪裏。

它使用Spring的JdbcTemplatequery method它調用準備好的語句中的參數替換。