Tar*_*haf 5 java spring-security spring-security-oauth2 jhipster
我们正在开发一个将 OAuth 2 用于两个用例的应用程序:
client_credentials
)authorization_code
,因此将用户重定向到 Keycloak 进行登录,大致配置如教程中所示)。在对用户进行身份验证时,我们从身份验证服务器接收部分信息(例如登录信息),另一部分可以在本地用户表中找到。我们想要做的是创建一个主体对象,其中还包含本地数据库中的数据。
PrimaryExtractor似乎是一条出路。由于我们必须使用手动 OAuth 配置才能不干扰 OAuth 用例 1,因此我们创建它并设置它:
tokenServices.setPrincipalExtractor(ourPrincipalExtractor);
Run Code Online (Sandbox Code Playgroud)
该实现基本上执行数据库查找并在映射函数中返回 CustomUser 对象。现在,虽然这似乎有效(调用提取器),但它没有正确地保留在会话中。因此,在我们的许多 REST 资源中,我们正在注入当前用户:
someRequestHandler(@AuthenticationPrincipal CustomUser activeUser) {
Run Code Online (Sandbox Code Playgroud)
并在那里接收 null 。查看注入的Authentication
它表明它是一个OAuth2Authentication对象,具有默认的主体对象(我认为它是一个 Spring User
/ UserDetails
)。之所以为空,是因为它不是我们CustomUser
之前返回的。
我们是否误解了工作方式PrincipalExtractor
?这是否是我们的过滤器链配置错误,因为我们在同一个应用程序中有两种不同的 OAuth 机制(如前面提到的)?Spring 的主体存储库中的断点向我们展示了它CustomUser
保存在那里,然后使用原始类型进行保存,这似乎覆盖了它。
好吧,回答我自己的问题:
PrincipalExtractor
似乎是定制主体的常用和标准方法User
. 因此所有映射都PrincipalExtractor
被重置。如果有人有同样的问题:看看UserService
。我猜这就是使用您不详细了解的生成代码的缺点。
归档时间: |
|
查看次数: |
3405 次 |
最近记录: |