Spring Security OAuth2集成Keycloak时出现BearerTokenResolver类找不到异常
问题原因
BearerTokenResolver 类属于 spring-security-oauth2-resource-server 模块,但你的依赖配置存在版本不匹配问题——直接引入独立的Spring Security模块,未通过Spring Boot starter统一版本管理,导致类加载失败。
解决方案
- 替换资源服务器依赖
将pom.xml中独立的spring-security-oauth2-resource-server依赖,替换为Spring Boot官方starter:
<!-- 移除原有独立依赖 --> <!-- <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-resource-server</artifactId> </dependency> --> <!-- 添加Spring Boot OAuth2资源服务器starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>
Spring Boot starter会自动统一管理所有相关依赖版本,避免版本冲突引发的类缺失问题。
- 清理并重新构建依赖
执行Maven命令清理本地缓存并强制更新依赖:
mvn clean install -U
- 排查依赖冲突(可选)
若问题仍存在,执行以下命令查看依赖树,确认spring-security-oauth2-resource-server版本是否与Spring Boot版本匹配:
mvn dependency:tree | grep oauth2-resource-server
若版本不一致,需排除其他依赖中强制修改版本的冲突项。
额外配置修正
- Security角色校验:Keycloak返回的角色默认带
ROLE_前缀,需将hasRole("role-name")调整为hasRole("ROLE_role-name"),或改用hasAuthority("role-name")。 - application.yml provider配置:
provider节点名称需与registration中的provider: keycloak对应,修正后如下:
provider: keycloak: authorization-uri: http://keycloak-url/realms/realm-id/protocol/openid-connect/auth token-uri: http://keycloak-url/realms/realm-id/protocol/openid-connect/token user-info-uri: http://keycloak-url/realms/realm-id/protocol/openid-connect/userinfo jwk-set-uri: http://keycloak-url/realms/realm-id/protocol/openid-connect/certs user-name-attribute: preferred_username
内容的提问来源于stack exchange,提问作者kernel
相关产品推荐
相关产品推荐

