Вопрос или проблема
По “причинам”, не зависящим от меня, текущая конфигурация имеет 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=/
, вы можете использовать следующие шаги:
-
Изменение конфигурации 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(); // Выбор метода аутентификации (можно настроить по вашему усмотрению) } }
-
Конфигурация Actuator:
Убедитесь, что включены необходимые эндпоинты Actuator. Это можно настроить вapplication.properties
:management.endpoints.web.exposure.include=*
Таким образом, все эндпоинты Actuator будут доступны. Если хотите ограничить доступ к конкретным конечным точкам, перечислите их в конфигурации.
-
Обработка CXF:
Ваша конфигурация CXF должна оставаться такой, как вы указали:cxf.path=/ cxf.jaxrs.server.address=/api cxf.jaxrs.component-scan=true
Поскольку вы планируете использовать путь
/api
для REST-сервисов, это не должно повлиять на рабочие SOAP-сервисы и обходить проблемы с Auth для эндпоинтов Actuator. -
Тестирование:
После внесения изменений протестируйте доступ к следующим URL:/actuator
– должен быть доступен без аутентификации./api/soap1
и/api/soap2
– должны работать с вашими текущими настройками безопасности.
-
Дополнительные настройки:
Если возникнут дополнительные проблемы с маршрутизацией или аутентификацией, проверьте логи приложения для детального анализа. Иногда проблемы могут быть вызваны более глубокими конфигурациями Spring.
Следуя описанным шагам, вы сможете интегрировать Spring Actuator и Spring Security в ваше приложение на базе Spring Boot с использованием CXF, не меняя при этом имеющиеся пути для SOAP-сервисов.