spring 安全在哪里取值来代替通配符?
where does spring security takes values to replace wild card?
我已阅读以下文章:
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=?;"
据我了解以下查询是查询所有用户是否可以登录。
据我了解,这类似于准备好的陈述。但是当我们使用准备好的语句时,我们会这样写:
preparedStatement.setString(1, "John");
我不明白 spring 在哪里用 USERNAME
值替换 ?
用户名是您在验证时提交的用户名,随后传递给 UserDetailsService
。如果您查看 the code for the JDBC version.
,您可以看到实际替换发生的位置
它使用 Spring 的 JdbcTemplate
和它调用的 query
method 替换准备好的语句中的参数。
我已阅读以下文章:
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=?;"
据我了解以下查询是查询所有用户是否可以登录。
据我了解,这类似于准备好的陈述。但是当我们使用准备好的语句时,我们会这样写:
preparedStatement.setString(1, "John");
我不明白 spring 在哪里用 USERNAME
值替换 ?
用户名是您在验证时提交的用户名,随后传递给 UserDetailsService
。如果您查看 the code for the JDBC version.
它使用 Spring 的 JdbcTemplate
和它调用的 query
method 替换准备好的语句中的参数。