[keycloak-user] Using keycloak-spring-boot-starter throws NullPointerException when “keycloak.enabled = false” in spring boot application.properties

Sebastien Blanc sblanc at redhat.com
Wed Nov 29 10:02:27 EST 2017


keycloak.enable property only works for the Spring Boot Adapter, not for
the Spring Security Adapter. There is already a ticket opened to align the
feature.



On Wed, Nov 29, 2017 at 1:35 PM, Pharande Rahul <rahul.pharande at gi-de.com>
wrote:

> Hi,
>
> While using “keycloak-spring-boot-starter v3.4.0.Final” with
> “spring-boot-starter-security V1.5.8.RELEASE”, I’m getting
> NullPointerException as described below.
> Please let me know if anyone has suggestion on this, OR this is really
> defect in keycloak adapter.
>
> Precondition –
>
> ·         Application configured to use spring-security with
> KeycloakWebSecurityConfigurerAdapter. As shows below class SecurityConfig
> in Example section (A).
>
> ·         Disable keycloak in spring boot’s Application property as
> “keycloak.enabled = false”
>
> Expected Result –
>
> ·         When Keycloak is disabled, spring security should handle
> authentication OR should not perform authentication.
>
> Actual Result –
>                 java.lang.NullPointerException: null
>         at org.keycloak.adapters.KeycloakDeploymentBuilder.internalBuild(
> KeycloakDeploymentBuilder.java:55) ~[keycloak-adapter-core-3.4.0.
> Final.jar!/:3.4.0.Final]
>         at org.keycloak.adapters.KeycloakDeploymentBuilder.build(
> KeycloakDeploymentBuilder.java:164) ~[keycloak-adapter-core-3.4.0.
> Final.jar!/:3.4.0.Final]
>         at org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolv
> er.resolve(KeycloakSpringBootConfigResolver.java:37)
> ~[keycloak-spring-boot-adapter-3.4.0.Final.jar!/:3.4.0.Final]
>         at org.keycloak.adapters.AdapterDeploymentContext.
> resolveDeployment(AdapterDeploymentContext.java:88)
> ~[keycloak-adapter-core-3.4.0.Final.jar!/:3.4.0.Final]
>         at org.keycloak.adapters.PreAuthActionsHandler.preflightCors(
> PreAuthActionsHandler.java:107) ~[keycloak-adapter-core-3.4.0.
> Final.jar!/:3.4.0.Final]
>         at org.keycloak.adapters.PreAuthActionsHandler.handleRequest(PreAuthActionsHandler.java:79)
> ~[keycloak-adapter-core-3.4.0.Final.jar!/:3.4.0.Final]
>         at org.keycloak.adapters.springsecurity.filter.
> KeycloakPreAuthActionsFilter.doFilter(KeycloakPreAuthActionsFilter.java:81)
> ~[keycloak-spring-security-adapter-3.4.0.Final.jar!/:3.4.
>         at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:331)
> ~[spring-security-web-4.2.3.RELEASE.jar!/:4.2.3.RELEASE]
>         at org.springframework.security.web.csrf.CsrfFilter.
> doFilterInternal(CsrfFilter.java:100) ~[spring-security-web-4.2.3.
> RELEASE.jar!/:4.2.3.RELEASE]
>                  at org.springframework.web.filter.OncePerRequestFilter.
> doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.12.RELEASE.
> jar!/:4.3.12.RELEASE]
>
> What can be done here:
>
> ·         Ideal Option: Keycloak adapter classes like “
> KeycloakWebSecurityConfigurerAdapter” should avoid registering it’s
> filters when “keycloak.enabled” property is false.
>
> ·         Temporary Option: we can handle this at application config level
> by defining  on SecurityConfig class
>
> o   @ConditionalOnProperty(name = "keycloak.enabled", havingValue = "true")
>
> Example Section A:
>
> @KeycloakConfiguration
> public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
>
>     @Autowired
>     public void configureGlobal(AuthenticationManagerBuilder auth) throws
> Exception {
>         KeycloakAuthenticationProvider keyCloakAuthProvider =
> keycloakAuthenticationProvider();
>         keyCloakAuthProvider.setGrantedAuthoritiesMapper(new
> SimpleAuthorityMapper());
>
>         auth.authenticationProvider(keyCloakAuthProvider);
>     }
>
>     @Override
>     protected void configure(HttpSecurity http) throws Exception
>     {
>         super.configure(http);
>         http
>             .sessionManagement().sessionCreationPolicy(
> SessionCreationPolicy.STATELESS)
>             .sessionAuthenticationStrategy(sessionAuthenticationStrategy(
> ))
>             .and()
>             .authorizeRequests()
>             .antMatchers("/test*").hasRole("ADMIN")
>             .anyRequest().permitAll();
>     }
>
>     @Override
>     protected SessionAuthenticationStrategy sessionAuthenticationStrategy()
> {
>         return new NullAuthenticatedSessionStrategy();
>     }
>
>     @Bean
>     public KeycloakConfigResolver KeyCloakConfigResolver(){
>         return new KeycloakSpringBootConfigResolver();
>     }
> }
>
> Thanks and Regards.
> Rahul Pharande
>
> _______________________________________________
> keycloak-user mailing list
> keycloak-user at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-user
>


More information about the keycloak-user mailing list