java.lang.IllegalStateException:当我尝试将 keycloak 与 spring boot web + spring security 项目集成时,当前用户主体不是类型

Posted

技术标签:

【中文标题】java.lang.IllegalStateException:当我尝试将 keycloak 与 spring boot web + spring security 项目集成时,当前用户主体不是类型【英文标题】:java.lang.IllegalStateException:Current user principal is not of type when i try to integrate keycloak with spring boot web + spring security project 【发布时间】:2020-03-08 01:46:40 【问题描述】:

我创建了一个 Spring Boot Web 项目 (.war) 以部署在应用程序服务器中。我想将 keycloak sso 与 spring security 集成。重定向到 keycloak 登录页面工作正常。但之后它在浏览器中抛出错误。

浏览器报错

出现意外错误(类型=内部服务器错误,状态=500)。 当前用户主体不是 [org.keycloak.KeycloakPrincipal] 类型:org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken@450ca8a1:主体:da02ad1b-32c1-4dde-a6f4-b56a06d7dc2e;凭证:[受保护];已认证:真实;详细信息:org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount@20e00226;未授予任何权限

应用服务器控制台出错

2019-11-12 14:29:38.306 ERROR 6280 --- [nio-8089-exec-5] osbwservlet.support.ErrorPageFilter : 由于异常 [当前用户主体] 从请求 [/] 转发到错误页面不是 [org.keycloak.KeycloakPrincipal] 类型:org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken@f4a97409:主体:da02ad1b-32c1-4dde-a6f4-b56a06d7dc2e;凭证:[受保护];已认证:真实;详细信息:org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount@11f292bf;授予权限:KeycloakRolerole='user-premium'、KeycloakRolerole='user']

java.lang.IllegalStateException:当前用户主体不是 [org.keycloak.KeycloakPrincipal] 类型:org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken@f4a97409:主体:da02ad1b-32c1-4dde-a6f4-b56a06d7dc2e;凭证:[受保护];已认证:真实;详细信息:org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount@11f292bf;授予权限:KeycloakRolerole='user-premium'、KeycloakRolerole='user' 在 org.springframework.web.servlet.mvc.method.annotation.ServletRequestMethodArgumentResolver.resolveArgument(ServletRequestMethodArgumentResolver.java:166) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.ServletRequestMethodArgumentResolver.resolveArgument(ServletRequestMethodArgumentResolver.java:121) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE] 在 org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:126) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE] 在 org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:166) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]

【问题讨论】:

【参考方案1】:

异常 [当前用户主体不是 [org.keycloak.KeycloakPrincipal] 类型

您应该使用KeycloakAuthenticationToken 而不是KeycloakPrincipal

【讨论】:

【参考方案2】:

问题就像我在控制器方法中使用了 KeycloakPrincipal 主体

【讨论】:

以上是关于java.lang.IllegalStateException:当我尝试将 keycloak 与 spring boot web + spring security 项目集成时,当前用户主体不是类型的主要内容,如果未能解决你的问题,请参考以下文章