Spring安全性在哪里取值来取代外卡?

时间:2015-01-05 10:22:45

标签: java spring jdbc spring-security

我读过以下文章:

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

弹簧配置:

<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=?;"

据我了解以下查询是查询所有用户都可以登录 据我所知,它就像准备好的声明。但是当我们使用预备语句时,我们会写出这样的东西:

preparedStatement.setString(1, "John");

我不明白spring取代USERNAME

取值?的位置

1 个答案:

答案 0 :(得分:1)

用户名是您进行身份验证时提交的用户名,随后会传递给UserDetailsService。如果查看the code for the JDBC version,您可以看到实际替换的位置。

它使用Spring的JdbcTemplate,并且它调用的query method会替换预准备语句中的参数。