При использовании Spring Boot с CXF можно ли настроить Spring Security / actuator, если cxf.path установлен на /?

Вопрос или проблема

По “причинам”, не зависящим от меня, текущая конфигурация имеет cxf.path=/. Я пытаюсь добавить Spring Actuator и Spring Security, но не могу заставить их работать, пока путь остается “https://stackoverflow.com/”. Все, что не требует аутентификации, работает нормально, но для всего остального я получаю либо 404, либо “Сервис не найден”.

В данный момент у меня есть:

  • host/soap1
  • host/soap2
  • host/api/rest1

и я пытаюсь добавить

  • host/actuator

application.properties

cxf.path=/
cxf.jaxrs.server.address=/api
cxf.jaxrs.component-scan=true

Как только я удаляю cxf.path или изменяю его на что-то, кроме /, все начинает работать. Однако это изменяет пути для /soap1 и /soap2, чего я пытаюсь избежать.

Ответ или решение

В Spring Boot с использованием Apache CXF есть определенные вызовы при конфигурации Spring Security и Actuator, особенно когда cxf.path установлено на /. Эта конфигурация может вызывать проблемы с маршрутами и конфликтами между сервисами SOAP и REST.

Чтобы решить вашу проблему и добавить поддержку Spring Actuator и Spring Security в настройки с cxf.path=/, вы можете использовать следующие шаги:

  1. Изменение конфигурации Spring Security:
    Вам нужно сконфигурировать Spring Security так, чтобы он игнорировал запросы к /actuator. Для этого можно создать класс конфигурации безопасности.

    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
       @Override
       protected void configure(HttpSecurity http) throws Exception {
           http
               .csrf().disable()
               .authorizeRequests()
                   .antMatchers("/actuator/**").permitAll() // Разрешаем доступ к эндпоинтам Actuator
                   .anyRequest().authenticated() // Другие запросы требуют аутентификации
               .and()
               .httpBasic(); // Выбор метода аутентификации (можно настроить по вашему усмотрению)
       }
    }
  2. Конфигурация Actuator:
    Убедитесь, что включены необходимые эндпоинты Actuator. Это можно настроить в application.properties:

    management.endpoints.web.exposure.include=*

    Таким образом, все эндпоинты Actuator будут доступны. Если хотите ограничить доступ к конкретным конечным точкам, перечислите их в конфигурации.

  3. Обработка CXF:
    Ваша конфигурация CXF должна оставаться такой, как вы указали:

    cxf.path=/
    cxf.jaxrs.server.address=/api
    cxf.jaxrs.component-scan=true

    Поскольку вы планируете использовать путь /api для REST-сервисов, это не должно повлиять на рабочие SOAP-сервисы и обходить проблемы с Auth для эндпоинтов Actuator.

  4. Тестирование:
    После внесения изменений протестируйте доступ к следующим URL:

    • /actuator – должен быть доступен без аутентификации.
    • /api/soap1 и /api/soap2 – должны работать с вашими текущими настройками безопасности.
  5. Дополнительные настройки:
    Если возникнут дополнительные проблемы с маршрутизацией или аутентификацией, проверьте логи приложения для детального анализа. Иногда проблемы могут быть вызваны более глубокими конфигурациями Spring.

Следуя описанным шагам, вы сможете интегрировать Spring Actuator и Spring Security в ваше приложение на базе Spring Boot с использованием CXF, не меняя при этом имеющиеся пути для SOAP-сервисов.

Оцените материал
Добавить комментарий

Капча загружается...