我已配置JDBC数据源并自动装配JDBCTemplate以执行自定义SQL查询 . 我也有一个简单的HTTP基本身份验证:
auth.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
但是,我想使用用于HTTP Basic的用户和密码来验证数据库本身的用户,即将HTTP Basic的凭据传递给数据源,并以使用HTTP Basic身份验证登录的用户执行查询 . 我在这里面临两个问题,一个是用户名和密码在application.properties文件中,我想在每次用户进行身份验证时覆盖,并且(重新加载?)执行查询作为该用户而不是在用户指定的用户属性文件 .
更新1:
我可以通过编程方式使用如下的用户名和密码:
@Bean
@Primary
public DataSource dataSource() {
return DataSourceBuilder
.create()
.username("")
.password("")
.url("")
.driverClassName("")
.build();
}
但是每次用户使用这些凭据使用HTTP Basic身份验证时,如何调用此方法?
1 回答
使用
UserCredentialsDataSourceAdapter
作为@ "M. Deinum"建议使用某种过滤器或处理AuthenticationSuccessEvent
.基本上你应该用当前主体
username
和password
调用setCredentialsForCurrentThread
方法 .您必须禁用身份验证管理器的凭据擦除才能在身份验证后检索用户密码 .
数据源适配器:
AuthenticationSuccessHandler:
或者您可以使用
Filter
而不是事件侦听器:查看完整示例here .