如何扩展 OAuth2 主体

2024-03-04

我们正在开发一个将 OAuth 2 用于两个用例的应用程序:

  1. 访问后端微服务(使用client_credentials)
  2. 验证应用程序的用户(使用authorization_code,因此将用户重定向到 Keycloak 进行登录,大致配置如下所示tutorial https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_manual).

在对用户进行身份验证时,我们从身份验证服务器接收部分信息(例如登录信息),另一部分可以在本地用户表中找到。我们想要做的是创建一个主体对象,其中还包含本地数据库中的数据。

主要提取器 https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/security/oauth2/resource/PrincipalExtractor.html似乎是要走的路 http://mmkay.pl/2017/03/19/spring-boot-saving-oauth2-login-data-in-db-using-principalextractor/。由于我们必须使用手动 OAuth 配置才能不干扰 OAuth 用例 1,因此我们创建它并设置它:

tokenServices.setPrincipalExtractor(ourPrincipalExtractor);

该实现基本上执行数据库查找并在映射函数中返回 CustomUser 对象。现在,虽然这似乎有效(调用提取器),但它没有正确地保留在会话中。因此,在我们的许多 REST 资源中,我们正在注入当前用户:

someRequestHandler(@AuthenticationPrincipal CustomUser activeUser) {

并在那里接收 null 。正在研究注射的Authentication它表明它是一个OAuth2身份验证 https://docs.spring.io/spring-security/oauth/apidocs/org/springframework/security/oauth2/provider/OAuth2Authentication.html对象与默认的主体对象(我认为它是一个SpringUser / UserDetails)。如此 null 因为它不是我们的CustomUser之前回来过。

我们是否误解了方法PrincipalExtractor作品?这是否是我们的过滤器链配置错误,因为我们在同一个应用程序中有两种不同的 OAuth 机制(如前面提到的)? Spring 的主要存储库中的断点向我们表明CustomUser保存在那里,然后使用原始类型保存,这似乎会覆盖它。


好吧,回答我自己的问题:

  1. PrincipalExtractor似乎是定制主体的常用和标准方法
  2. 它在我们的例子中不起作用,因为我们使用的是 JHipster 应用程序,它在登录后立即用它自己的应用程序覆盖主体User。所以所有映射都在PrincipalExtractor已重置。如果有人有同样的问题:看看UserService.

我猜这就是使用您不详细了解的生成代码的缺点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何扩展 OAuth2 主体 的相关文章

  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • java.lang.ClassNotFoundException:javax.mail.MessagingException

    我想使用 eclipse 将电子邮件从我的 gmail 帐户发送到另一个邮件帐户 我使用 apache tomcat 7 0 34 作为我的 Web 服务器 并使用端口 8080 作为 apache 服务器 HTTP 1 1 并使用 JRE
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • 如何仅从 Firestore 获取最新更新的数据?

    在 Firestore 上发现任何更改时始终获取整个文档 如何只获取最近更新的数据 这是我的数据 我需要在第一次加载时在聊天中按对象顺序 例如 2018 09 17 30 40 msg和sendby 并且如果数据更新则仅获取新的msg和se
  • Java Applet 中的 Apache FOP - 未找到数据的 ImagePreloader

    我正在研究成熟商业产品中的一个问题 简而言之 我们使用 Apache POI 库的一部分来读取 Word DOC 或 DOCX 文件 并将其转换为 XSL FO 以便我们可以进行标记替换 然后 我们使用嵌入到 Java 程序中的 FOP 将
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • Java Swing - 如何禁用 JPanel?

    我有一些JComponents on a JPanel我想在按下 开始 按钮时禁用所有这些组件 目前 我通过以下方式显式禁用所有组件 component1 setEnabled false 但是有什么办法可以一次性禁用所有组件吗 我尝试禁用
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho

随机推荐

  • Delphi:通过一个套接字多线程发送数据

    有人可以告诉我如何通过多线程中的一个连接发送和接收数据吗 该模型如下所示 我所知道的是 如果所有三个客户端同时发送数据 客户端 X 将收到所有接收到的数据的合并 并且 客户端 X 无法分离该数据来识别哪一部分来自哪个客户端 德尔福2010
  • 如何在android中使用相机检查图像是在纵向模式还是横向模式下捕获的?

    我正在创建一个打开照片库的应用程序 通过从图库中选择该照片 照片将显示在另一个活动中 我的问题是 我以纵向模式拍摄的照片在显示后会旋转 但我在横向模式下拍摄的照片将正确显示 这就是为什么 我必须使用 Android 中的相机检查图像是在纵向
  • 运行 WHM 时如何以正确的方式添加虚拟主机?

    我正在运行一台专用服务器 为我的客户使用 WHM 和 CentOS 5 分隔帐户 我的一个客户要求我安装 subversion 并将存储库存储在 webroot 下 repo 的真实文件夹将位于 home theirfolder svn 中
  • 如果没有内容长度标头,HTTP 保持活动连接是否可行?

    据我了解 在 HTTP 1 0 中 通过关闭连接来终止响应的内容 https stackoverflow com questions 20763999 how does http keep alive work 在 HTTP 1 1 中 保
  • 将文件从 URL 上传到 Microsoft Azure Blob 存储

    从本地路径 从我的计算机 上传文件不是问题 但是 我没有找到如何从特定 URL 上传 如果可能的话 需要 Python 解决方案 仅本地文件有文档https learn microsoft com en us azure storage b
  • 使用 LINQ 访问表中第一个元素时出现 SQLite 错误

    使用 LINQ 访问 SQLite 数据库时遇到以下问题 缩写代码如下所示 using System Linq using System Data Linq using System Data Linq Mapping using Syst
  • Swift:通过在窗口中拖放打开文件

    在 Swift 中 如何在 Mac 应用程序的窗口中构建一个区域 用户可以将文件夹拖放到该区域 并让我的应用程序接收该文件夹的路径 原则上 在我看来 这与苹果的概念类似CocoaDragAndDrop 示例 https developer
  • 如何在 Scala 中比较两个对象是否相等?

    我在两个对象之间进行了非常基本的相等性检查 但它失败了 package foo import org junit Assert object Sandbox extends App class A val a new A val b new
  • 类型错误:“in ”需要字符串作为左操作数,而不是列表(函数)

    variableName display screen sound audio fileName PPP Abc P1 PPP d display s screen ss sound a audio d P1 loop True def C
  • 为什么我不能从下一个日期周期中减去一个日期周期并转换为整数?

    我试图确定两个月之间的差异是偶数还是奇数月份 我使用了命令 import pandas as pd pd to datetime 2019 01 01 to period M pd to datetime 2018 08 01 to per
  • 使用 xlrd 和 xlwt 编辑现有 Excel 工作簿和工作表

    In the 文档 http www simplistix co uk presentations python excel pdf for xlrd and xlwt我学到了以下内容 如何阅读现有的工作簿 工作表 from xlrd im
  • .gitattributes 在 Mac 和 Windows 上无法正常工作

    在我的项目中 我使用具有不同操作系统的计算机 一个是 Mac 第二个是 Windows 当我使用 git 时 每个更改都会显示为整个文档更改 原因是这两个操作系统中的行尾不同 我读了这个https help github com artic
  • 如何使用Struts 2和Hibernate维护会话?

    我需要知道如何维护一种形式和多种形式的会话input Name City Country 使用Struts2 最后数据将使用Hibernate存储到数据库 该表单有两个按钮 add 存储到会话 Submit 存储到数据库 首先 输入表格详细
  • GAE:memcache:在多个应用程序实例中是否相同

    我有一个非常基本的问题 在 GAE 中 如果我使用 memcache 来存储第一次从数据库检索到的一些数据 如果该数据在缓存中保留大约 2 天 那么所述应用程序的所有实例都会得到 查看 它并从缓存中检索它 或者每个应用程序实例的缓存是独立的
  • 滚动到模式窗口内的元素

    我有一个模式窗口 需要能够打开模式 然后将用户滚动到模式中的特定位置 我正在使用 AJAX 将模态内容获取到 PHP 脚本 例如 mypage php loc someid 在 PHP 脚本中 我有这个 JS 来执行滚动 document
  • URI 中的方案是可选的吗?

    最近 我被要求向网站添加一些 Woopra JavaScript 并注意到 URL 以双斜杠开头 即省略了方案 我以前从未见过这个 所以我试图了解更多信息 但我唯一能找到的是Woopra 常见问题解答中的一个项目 http www woop
  • Travis 无法构建 Android 项目,没有 local.properties

    事情是这样的 我已经在 Travis CI 上构建了我的项目好几次了 但每次都会遇到同样的问题 错误日志 What went wrong A problem occurred evaluating root project LiteRead
  • Eclipse 在 Ctrl-S 上跳转到函数名称

    当我按 Ctrl S 将 Java 文件保存在 Eclipse 中时 它会跳转到函数名称 这很烦人 有人知道该怎么办吗 转到 窗口 gt 首选项 gt 常规 gt 按键 您也可以搜索Keys在主首选项窗口中 您很可能添加了一个绑定 当您按下
  • 创建圆形鼠标悬停饱和效果

    我有两个版本的图像 去饱和版本和全彩版本 我想要实现的是悬停效果 其中将鼠标悬停在去饱和图像上会显示图像的彩色版本的圆圈 这有点像将聚光灯照射在饱和度降低的图像上以显示其颜色 然后 当您将鼠标移开时 它会淡回到不饱和状态 我知道我可能可以使
  • 如何扩展 OAuth2 主体

    我们正在开发一个将 OAuth 2 用于两个用例的应用程序 访问后端微服务 使用client credentials 验证应用程序的用户 使用authorization code 因此将用户重定向到 Keycloak 进行登录 大致配置如下