Приложение Spring boot + keycloak не работает при развертывании в Tomcat - PullRequest
1 голос
/ 14 апреля 2020

Я интегрировал Keycloak с моим приложением весенней загрузки. Это работает, когда я запускаю его с помощью весенней загрузки. Но когда я создаю войну и развертываюсь на tomcat, я получаю исключение:

java.lang.NullPointerException: null
    at org.keycloak.adapters.KeycloakDeploymentBuilder.internalBuild(KeycloakDeploymentBuilder.java:57) ~[keycloak-adapter-core-9.0.2.jar:9.0.2]

Что мне нужно сделать, чтобы развернуть это на tomcat?

Вот мой application.properties file:

# keycloak configuration
keycloak.realm=salary-plus
keycloak.auth-server-url=http://localhost:8080/auth
keycloak.ssl-required=external
keycloak.resource=salary-plus-api
keycloak.credentials.secret=8dd03031-60ac-4ef5-9ae5-19a2e3460da2
keycloak.use-resource-role-mappings = true

А вот мой весенний класс конфигурации безопасности:

@Configuration
@EnableWebSecurity
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(
            AuthenticationManagerBuilder auth) throws Exception {

        KeycloakAuthenticationProvider keycloakAuthenticationProvider
                = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(
                new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }

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

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        http
                .csrf()
                .disable();
        http.authorizeRequests()
                .antMatchers(HttpMethod.GET, "/api/disbursement/**").hasAnyRole(
                        "disbursement_maker", "disbursement_checker")
                .antMatchers(HttpMethod.POST, "/api/disbursement/request").hasRole("disbursement_maker")
                .antMatchers(HttpMethod.PUT, "/api/disbursement/item/*").hasRole("disbursement_maker")
                .antMatchers(HttpMethod.PATCH, "/api/disbursement/request/update/*").hasRole("disbursement_maker")
                .antMatchers("/api/auth/**").permitAll()
                .anyRequest()
                .denyAll();
    }
}

1 Ответ

1 голос
/ 17 апреля 2020

Для развертывания в виде файла WAR вам необходимо использовать адаптер Keycloak Spring Security или адаптер Tomcat вместо адаптера Spring Boot. Из документов :

Если вы планируете развертывать приложение Spring в качестве WAR, вам не следует использовать адаптер Spring Boot и использовать выделенный адаптер для сервера приложений или сервлета. Контейнер, который вы используете. Ваш Spring Boot также должен содержать файл. xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...