我读过以下文章:
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
?
的位置
答案 0 :(得分:1)
用户名是您进行身份验证时提交的用户名,随后会传递给UserDetailsService
。如果查看the code for the JDBC version,您可以看到实际替换的位置。
它使用Spring的JdbcTemplate
,并且它调用的query
method会替换预准备语句中的参数。