在仅承载应用程序中,我成功从Keycloak实例接收访问令牌 . 然后,我使用此令牌对我的Spring Security服务器(使用相同的Keycloak实例)发出请求 .

但我得到了所有403错误 .

我在我的keycloak实例上创建了一个角色"manager",并将其分配给我用于测试的用户,但它不起作用 . 当我签入日志时,我看到 Not granted any authorities

@Configuration
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class, excludeFilters = @ComponentScan.Filter(type =
        FilterType.REGEX, pattern = "org.keycloak.adapters.springsecurity.management.HttpSessionManager"))
@EnableWebSecurity
public class KeycloakSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {

    private final KeycloakClientRequestFactory keycloakClientRequestFactory;

    public KeycloakSecurityConfig(KeycloakClientRequestFactory keycloakClientRequestFactory) {
        this.keycloakClientRequestFactory = keycloakClientRequestFactory;
SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL);
    }

    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public KeycloakRestTemplate keycloakRestTemplate() {
        return new KeycloakRestTemplate(keycloakClientRequestFactory);
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) {
        KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }

    @Bean
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new NullAuthenticatedSessionStrategy();
    }

    @Bean
    public KeycloakConfigResolver KeycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests().antMatchers("/api/*").hasRole("manager").anyRequest().permitAll();
    }

    @Bean
    public FilterRegistrationBean keycloakAuthenticationProcessingFilterRegistrationBean(
            KeycloakAuthenticationProcessingFilter filter) {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
        registrationBean.setEnabled(false);
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean keycloakPreAuthActionsFilterRegistrationBean(KeycloakPreAuthActionsFilter filter) {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
        registrationBean.setEnabled(false);
        return registrationBean;
    }
}

调试日志:

19:24:27.062 [http-nio-8000-exec-2] DEBUG o.k.adapters.PreAuthActionsHandler - adminRequest http://localhost:8000/api/contracts
19:24:27.067 [http-nio-8000-exec-2] DEBUG o.k.a.a.ClientCredentialsProviderUtils - Using provider 'secret' for authentication of client 'backend_client'
19:24:27.071 [http-nio-8000-exec-2] DEBUG o.k.a.a.ClientCredentialsProviderUtils - Loaded clientCredentialsProvider secret
19:24:27.072 [http-nio-8000-exec-2] DEBUG o.k.a.a.ClientCredentialsProviderUtils - Loaded clientCredentialsProvider jwt
19:24:27.073 [http-nio-8000-exec-2] DEBUG o.k.a.a.ClientCredentialsProviderUtils - Loaded clientCredentialsProvider secret-jwt
19:24:27.073 [http-nio-8000-exec-2] DEBUG o.k.a.a.ClientCredentialsProviderUtils - Loaded clientCredentialsProvider secret
19:24:27.074 [http-nio-8000-exec-2] DEBUG o.k.a.a.ClientCredentialsProviderUtils - Loaded clientCredentialsProvider jwt
19:24:27.074 [http-nio-8000-exec-2] DEBUG o.k.a.a.ClientCredentialsProviderUtils - Loaded clientCredentialsProvider secret-jwt
19:24:27.103 [http-nio-8000-exec-2] DEBUG o.k.adapters.KeycloakDeployment - resolveUrls
19:24:27.104 [http-nio-8000-exec-2] DEBUG o.k.a.KeycloakDeploymentBuilder - Use authServerUrl: http://localhost:8180/auth, tokenUrl: http://localhost:8180/auth/realms/project-dev-realm/protocol/openid-connect/token, relativeUrls: NEVER
19:24:27.105 [http-nio-8000-exec-2] DEBUG o.k.adapters.PreAuthActionsHandler - checkCorsPreflight http://localhost:8000/api/contracts
19:24:27.110 [http-nio-8000-exec-2] DEBUG o.k.a.t.AbstractAuthenticatedActionsValve - AuthenticatedActionsValve.invoke /api/contracts
19:24:27.111 [http-nio-8000-exec-2] DEBUG o.k.a.AuthenticatedActionsHandler - AuthenticatedActionsValve.invoke http://localhost:8000/api/contracts
19:24:27.111 [http-nio-8000-exec-2] DEBUG o.k.a.AuthenticatedActionsHandler - Origin: null uri: http://localhost:8000/api/contracts
19:24:27.111 [http-nio-8000-exec-2] DEBUG o.k.a.AuthenticatedActionsHandler - cors validation not needed as were not a secure session or origin header was null: {0}
19:24:27.112 [http-nio-8000-exec-2] DEBUG o.k.a.AuthenticatedActionsHandler - Policy enforcement is disabled.
19:24:27.115 [http-nio-8000-exec-2] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
19:24:27.115 [http-nio-8000-exec-2] INFO  o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
19:24:27.122 [http-nio-8000-exec-2] INFO  o.s.web.servlet.DispatcherServlet - Completed initialization in 7 ms
19:24:27.131 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 1 of 15 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
19:24:27.132 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 2 of 15 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
19:24:27.132 [http-nio-8000-exec-2] DEBUG o.s.s.w.c.HttpSessionSecurityContextRepository - Obtained a valid SecurityContext from SPRING_SECURITY_CONTEXT: 'org.springframework.security.core.context.SecurityContextImpl@4fb2e20e: Authentication: org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken@4fb2e20e: Principal: test_user; Credentials: [PROTECTED]; Authenticated: true; Details: org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount@1d8b33c6; Not granted any authorities'
19:24:27.134 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 3 of 15 in additional filter chain; firing Filter: 'HeaderWriterFilter'
19:24:27.134 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 4 of 15 in additional filter chain; firing Filter: 'CsrfFilter'
19:24:27.135 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 5 of 15 in additional filter chain; firing Filter: 'KeycloakPreAuthActionsFilter'
19:24:27.136 [http-nio-8000-exec-2] DEBUG o.k.adapters.PreAuthActionsHandler - adminRequest http://localhost:8000/api/contracts
19:24:27.136 [http-nio-8000-exec-2] DEBUG o.k.adapters.PreAuthActionsHandler - checkCorsPreflight http://localhost:8000/api/contracts
19:24:27.136 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 6 of 15 in additional filter chain; firing Filter: 'LogoutFilter'
19:24:27.136 [http-nio-8000-exec-2] DEBUG o.s.s.w.u.m.AntPathRequestMatcher - Request 'GET /api/contracts' doesn't match 'POST /sso/logout'
19:24:27.136 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 7 of 15 in additional filter chain; firing Filter: 'KeycloakAuthenticationProcessingFilter'
19:24:27.137 [http-nio-8000-exec-2] DEBUG o.s.s.w.u.matcher.OrRequestMatcher - Trying to match using Ant [pattern='/sso/login']
19:24:27.137 [http-nio-8000-exec-2] DEBUG o.s.s.w.u.m.AntPathRequestMatcher - Checking match of request : '/api/contracts'; against '/sso/login'
19:24:27.137 [http-nio-8000-exec-2] DEBUG o.s.s.w.u.matcher.OrRequestMatcher - Trying to match using RequestHeaderRequestMatcher [expectedHeaderName=Authorization, expectedHeaderValue=null]
19:24:27.137 [http-nio-8000-exec-2] DEBUG o.s.s.w.u.matcher.OrRequestMatcher - matched
19:24:27.137 [http-nio-8000-exec-2] DEBUG o.k.a.s.f.KeycloakAuthenticationProcessingFilter - Request is to process authentication
19:24:27.137 [http-nio-8000-exec-2] DEBUG o.k.a.s.f.KeycloakAuthenticationProcessingFilter - Attempting Keycloak authentication
19:24:27.139 [http-nio-8000-exec-2] DEBUG o.k.a.BearerTokenRequestAuthenticator - Found [1] values in authorization header, selecting the first value for Bearer.
19:24:27.140 [http-nio-8000-exec-2] DEBUG o.k.a.BearerTokenRequestAuthenticator - Verifying access_token
19:24:27.219 [http-nio-8000-exec-2] DEBUG o.k.a.rotation.JWKPublicKeyLocator - Realm public keys successfully retrieved for client backend_client. New kids: [0MDFCG7Ba0S2xPFwXsJbB0C0b8A8VcX8JPz6Yh6DFBQ]
19:24:27.220 [http-nio-8000-exec-2] DEBUG o.k.a.BearerTokenRequestAuthenticator - successful authorized
19:24:27.222 [http-nio-8000-exec-2] DEBUG o.k.a.s.a.SpringSecurityRequestAuthenticator - Completing bearer authentication. Bearer roles: [] 
19:24:27.222 [http-nio-8000-exec-2] DEBUG o.k.adapters.RequestAuthenticator - User 'test_user' invoking 'http://localhost:8000/api/contracts' on client 'backend_client'
19:24:27.223 [http-nio-8000-exec-2] DEBUG o.k.adapters.RequestAuthenticator - Bearer AUTHENTICATED
19:24:27.223 [http-nio-8000-exec-2] DEBUG o.k.a.s.f.KeycloakAuthenticationProcessingFilter - Auth outcome: AUTHENTICATED
19:24:27.223 [http-nio-8000-exec-2] DEBUG o.s.s.authentication.ProviderManager - Authentication attempt using org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider
19:24:27.224 [http-nio-8000-exec-2] DEBUG o.k.a.s.f.KeycloakAuthenticationProcessingFilter - Authentication success using bearer token/basic authentication. Updating SecurityContextHolder to contain: org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken@9a9541e: Principal: test_user; Credentials: [PROTECTED]; Authenticated: true; Details: org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount@116b39fc; Not granted any authorities
19:24:27.224 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 8 of 15 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
19:24:27.224 [http-nio-8000-exec-2] DEBUG o.s.s.w.s.HttpSessionRequestCache - saved request doesn't match
19:24:27.225 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 9 of 15 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
19:24:27.226 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 10 of 15 in additional filter chain; firing Filter: 'KeycloakSecurityContextRequestFilter'
19:24:27.226 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 11 of 15 in additional filter chain; firing Filter: 'KeycloakAuthenticatedActionsFilter'
19:24:27.226 [http-nio-8000-exec-2] DEBUG o.k.a.AuthenticatedActionsHandler - AuthenticatedActionsValve.invoke http://localhost:8000/api/contracts
19:24:27.226 [http-nio-8000-exec-2] DEBUG o.k.a.AuthenticatedActionsHandler - Origin: null uri: http://localhost:8000/api/contracts
19:24:27.226 [http-nio-8000-exec-2] DEBUG o.k.a.AuthenticatedActionsHandler - cors validation not needed as were not a secure session or origin header was null: {0}
19:24:27.226 [http-nio-8000-exec-2] DEBUG o.k.a.AuthenticatedActionsHandler - Policy enforcement is disabled.
19:24:27.226 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 12 of 15 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter'
19:24:27.226 [http-nio-8000-exec-2] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - SecurityContextHolder not populated with anonymous token, as it already contained: 'org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken@9a9541e: Principal: test_user; Credentials: [PROTECTED]; Authenticated: true; Details: org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount@116b39fc; Not granted any authorities'
19:24:27.226 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 13 of 15 in additional filter chain; firing Filter: 'SessionManagementFilter'
19:24:27.227 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 14 of 15 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
19:24:27.227 [http-nio-8000-exec-2] DEBUG o.s.security.web.FilterChainProxy - /api/contracts at position 15 of 15 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
19:24:27.227 [http-nio-8000-exec-2] DEBUG o.s.s.w.u.m.AntPathRequestMatcher - Request 'GET /api/contracts' doesn't match 'POST /sso/logout'
19:24:27.227 [http-nio-8000-exec-2] DEBUG o.s.s.w.u.m.AntPathRequestMatcher - Checking match of request : '/api/contracts'; against '/api/*'
19:24:27.227 [http-nio-8000-exec-2] DEBUG o.s.s.w.a.i.FilterSecurityInterceptor - Secure object: FilterInvocation: URL: /api/contracts; Attributes: [hasRole('ROLE_manager')]
19:24:27.227 [http-nio-8000-exec-2] DEBUG o.s.s.w.a.i.FilterSecurityInterceptor - Previously Authenticated: org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken@9a9541e: Principal: test_user; Credentials: [PROTECTED]; Authenticated: true; Details: org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount@116b39fc; Not granted any authorities
19:24:27.231 [http-nio-8000-exec-2] DEBUG o.s.s.access.vote.AffirmativeBased - Voter: org.springframework.security.web.access.expression.WebExpressionVoter@590faf92, returned: -1
19:24:27.233 [http-nio-8000-exec-2] DEBUG o.s.s.w.a.ExceptionTranslationFilter - Access is denied (user is not anonymous); delegating to AccessDeniedHandler
org.springframework.security.access.AccessDeniedException: Access is denied
    at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:84)
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:233)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:124)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticatedActionsFilter.doFilter(KeycloakAuthenticatedActionsFilter.java:74)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.keycloak.adapters.springsecurity.filter.KeycloakSecurityContextRequestFilter.doFilter(KeycloakSecurityContextRequestFilter.java:77)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter.successfulAuthentication(KeycloakAuthenticationProcessingFilter.java:208)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:240)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.keycloak.adapters.springsecurity.filter.KeycloakPreAuthActionsFilter.doFilter(KeycloakPreAuthActionsFilter.java:86)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:74)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.keycloak.adapters.tomcat.AbstractAuthenticatedActionsValve.invoke(AbstractAuthenticatedActionsValve.java:67)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    at org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.invoke(AbstractKeycloakAuthenticatorValve.java:181)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

应用属性:

# Server
server.port=8000

# Keycloak Json properties
keycloak.enabled=true
keycloak.realm=project-dev-realm
keycloak.auth-server-url=http://localhost:8180/auth
keycloak.resource=backend_client
keycloak.bearer-only=true
keycloak.credentials.secret=e3816a0c-9cf9-4082-9f09-2fa747fb861f
keycloak.principal-attribute=preferred_username
keycloak.cors=true

我无法找到问题所在 . 任何人都可以帮我找出问题所在 .

Spring启动版:2.1.1 Keycloak版本:4.7.0