我有一个场景,我试图将我的前端系统(SAP UI5)连接到OData源以获取结果。
但是,Java中有一个中间件层 - Spring引导,它捕获来自UI的所有请求并将其转发到OData服务。原因是,OData服务不是公开可用的。它们位于防火墙后面,而Spring Boot应用程序是公开可用的。所以,我使用反向代理来实现Spring Boot和OData服务之间的连接。
但问题是OData服务(API)需要用户身份验证才能访问数据。此用户身份验证已在UI层上完成一次。
从UI - > SPring Boot应用程序启用了App2Appp SSO。所以我可以利用Spring安全性来访问Principal对象。我想知道,除了知道登录用户的用户名外,我该如何获取密码?
当您使用Spring Security(Spring Boot或普通Spring)保护应用程序时,您有一个访问特定身份验证安全性的对象。
您可以调用并获取Principal(java安全性的对象):
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Spring中的这个主体是UserDetails对象,我们在Spring中配置所有用户信息。
然后获取用户名和密码并将它们传递给您的OData服务:
String username = ((UserDetails)principal).getUsername();
String password = ((UserDetails)principal).getPassword();