- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我开发了一个 Spring Boot Web 服务并使用 Keycloak 进行访问管理。该网站将一些用户数据存储在数据库中。我尝试将这些数据与登录的用户联系起来。
目前我将用户名与数据一起存储。但我喜欢存储用户 ID 而不是用户名。我怎样才能做到这一点?
我尝试通过这个获取 SecurityContext:
@Bean
@Scope(scopeName = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public KeycloakSecurityContext getKeycloakSecurityContext() {
return ((KeycloakPrincipal<KeycloakSecurityContext>) getRequest().getUserPrincipal()).getKeycloakSecurityContext();
}
但是我得到一个错误:
There was an unexpected error (type=Internal Server Error, status=500).
Error creating bean with name 'scopedTarget.getKeycloakSecurityContext'
defined in com.SiteApplication: Bean instantiation via factory method
failed; nested exception is
org.springframework.beans.BeanInstantiationException: Failed to
instantiate [org.keycloak.KeycloakSecurityContext]: Factory method
'getKeycloakSecurityContext' threw exception; nested exception is
java.lang.ClassCastException:
org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken
cannot be cast to org.keycloak.KeycloakPrincipal
这是正确的方法吗?什么东西少了?
谢谢!
最佳答案
我找到了一个比上面简单得多的解决方案:
@GetMapping
public ResponseEntity getEndpoint(String someParam, HttpServletRequest request) {
KeycloakAuthenticationToken principal = (KeycloakAuthenticationToken) request.getUserPrincipal();
String userId = principal.getAccount().getKeycloakSecurityContext().getIdToken().getSubject();
//....do something
return new ResponseEntity(HttpStatus.OK);
}
我认为你遇到的异常是因为你试图转换 getRequest().getUserPrincipal()
至 KeycloakPrincipal<KeycloakSecurityContext>
而它的类型是 KeycloakAuthenticationToken
, 所以 ((KeycloakAuthenticationToken) getRequest().getUserPrincipal())
会工作。
关于java - Spring key 斗篷 : Get User ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45802797/
我正在学习 Keycloak,但遇到以下问题。 我有一个通过 Keycloak(主应用程序)保护的 Java EE 应用程序。登录 keycloak 后,它会访问另一个应用程序(app-example
我正在学习 Keycloak,但遇到以下问题。 我有一个通过 Keycloak(主应用程序)保护的 Java EE 应用程序。登录 keycloak 后,它会访问另一个应用程序(app-example
亲爱的, 谁能告诉我与 micronaut 一起使用哪个适配器?我已经在 micronaut 框架和 keycloak 上编写的服务器启动并运行。对于 Spring Boot ,我们使用:
我有一个Kubernetes集群,在其中部署了以下部署和服务: apiVersion: v1 kind: Service metadata: name: keycloak labels:
我们正在使用 React/Redux 前端开发 Spring 应用程序。我们成功地将它与 Keycloak 身份验证服务集成在一起。但是,我们在访问 token 超时后遇到了不良行为。我们的 rest
我正在尝试从 postman 向 keycloack 发出请求以进行授权测试,但仍然收到此错误: { "error": "invalid_request", "error_descri
我设置了Keycloak服务器,并且服务器计算机上的一切运行正常,但是当我尝试将Keycloak与本地计算机(本地主机)集成时, We're sorry ... Client not found. 即
我想知道如何实现由 Keycloak 保护的 Angular 应用程序,以保护某些资源的方式。 例如。: 未经授权的用户访问 http://localhost:8000/#/ 公众 -> 用户未重定向
我正在使用 Keycloak 作为单点登录 (SSO) 平台的 OP。我已经将我的两个 Web 应用程序连接到 Keycloak,以便使用单点登录功能。 此外,我已经制作了一个应用程序,当注销时将被重
我开发了一个 Spring Boot Web 服务并使用 Keycloak 进行访问管理。该网站将一些用户数据存储在数据库中。我尝试将这些数据与登录的用户联系起来。 目前我将用户名与数据一起存储。但我
我已经从 Keycloak 的 OIDC 端点中提取了用户的组信息,但它们没有随我定义的组 ATTRIBUTES 一起提供(请参阅组表单中的“属性”选项卡,靠近“设置”)。是否有权利要求添加到我的请求
我刚刚设置了一个keycloak docker容器,如下所示: docker run --name keycloak --net keycloak-network -e DB_ADDR=mysql -
我想针对 Keycloak 服务器 (KS) 验证 Rest 服务 (RS)。 RS 是通过应用程序(APP)而不是浏览器访问的。 到目前为止,我了解的操作方法如下: APP 正在针对 KS 进行身份
如何根据用户 ID 获取用户 keycloak 属性(用户名、名字、电子邮件...)?我在 Keycloak session 中使用的用户已经分配了 view-users 角色,所以我应该能够至少列出
我们已将 Keycloak 配置为基于 SAML2 的外部身份提供者的身份代理。对于大多数用户,我们能够毫无问题地登录,但对于某些用户,我们在 Keycloak 端遇到问题,提示“处理身份提供者的身份
我想在 Keycloak 中实现这个身份验证流程: 用户只需输入他的电子邮件即可创建一个帐户 用户已登录并可以访问我的服务2'。同时,向他发送一封电子邮件,允许他“完成”他的帐户 用户离开他的 ses
我从事使用 keycloak 进行身份验证的 Web 项目。在决定阻止用户时可以考虑 IP 地址吗?示例:如果用户身份验证失败 5 次,我将屏蔽该 IP 地址。 最好的问候。 最佳答案 你说的类似于暴
我有一个 Angular(客户端)Java Spring Boot 2(服务器端)应用程序,它重定向到 Keycloak 以便用户执行他们的身份验证/注册等。在用户登录后,他们被重定向到应用程序他们的
我有一个 Javascript 客户端使用 OIDC 对 keycloak 进行身份验证。 身份验证在开发环境中工作正常,但在客户端和后端(包括 keycloak)之间使用反向代理时以重定向循环结束
我正在使用 Angular 8.0.3 和 keycloak 6.0.1 进行正面身份验证。 问题 我设法从我的应用程序进入 keycloak 登录页面。使用我的登录详细信息登录后,出现错误: -lo
我是一名优秀的程序员,十分优秀!