У меня есть 2 приложения, скажем, - Платформа - которая является чистым Spring MVC.
COM - Это приложение для весенней загрузки.
Платформа заботится об аутентификации и авторизации.
У меня есть 2 фильтра в платформе -
1- для проверки подлинности RestAPI (имя - APISeqFilter)
2- для проверки ввода пользователя для входа в систему (ValidationFilter)
в COM Iиметь конфигурацию java для регистрации фильтра, как показано ниже - (Примечание - не web.xml)
@Bean
public FilterRegistrationBean COMAPISecurityFilter() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(APISeqFilter());
registrationBean.addInitParameter("product", "com");
registrationBean.addUrlPatterns("/api/com/rest/v1/*");
registrationBean.setName("comAPISecurityFilter");
return registrationBean;
}
XML-файл, который импортируется в COM, как -
@ImportResource({ "classpath*:platform-security-authentication.xml" })
с объявлением для ValidationFilter , определенный в Platform, который должен быть выполнен во время входа в систему через пользовательский интерфейс (не в случае вызова REST API)
<security:http auto-config="false" realm="My Realm" use-expressions="false">
<security:headers disabled="true"/>
<security:csrf disabled="true"/>
<!-- Form based Authentication -->
<security:form-login login-page="/jsp/frameworklogin.jsp" username-parameter="j_username" password-parameter="j_password"
default-target-url="/jsp/index.jsp" authentication-failure-url="/jsp/frameworklogin.jsp?login_error=1"
login-processing-url="/jsp/j_spring_security_check" always-use-default-target="true" />
<security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" />
<security:custom-filter ref="HibernateSessionInViewFilter" position="FIRST" />
<security:custom-filter ref="compositePreAuthFilter" after="PRE_AUTH_FILTER" />
<security:custom-filter ref="compositePreAuthFilterBefore" before="PRE_AUTH_FILTER" />
<security:custom-filter ref="ssoAuthenticationProcessingFilter" after="CAS_FILTER" />
<security:custom-filter ref="requestHeaderUserPatternPreAuthenticatedProcessingFilter" position="PRE_AUTH_FILTER" />
<security:custom-filter ref="validationFilter" before="BASIC_AUTH_FILTER" />
<security:custom-filter ref="SuiteSecurityFilter" position="LAST" />
<security:custom-filter ref="logoutFilter" position="LOGOUT_FILTER" />
<security:session-management session-fixation-protection="newSession" />
</security:http>
И Platfrom, и COM развернуты на одном сервере - с контекстом root / plat и / com соответственно
Теперь проблема -
Ожидается - при вызове COM Rest API ({HOST: PORT} / com / api /com / rest / v1 / myAPI), APISeqFilter должен быть выполненd внутри Platfrom.
Actual - при выполнении API вызов не достигает APISeqFilter , а не достигает ValidationFilter
Примечание - При вызове API, созданного в Platform (скажем, -> {HOST: PORT} / plat / api / plt / rest / v1 / pltAPI), вызывается APISeqFilter, как и ожидалось.
То, что мы попробовали - мы создали WebSecurityConfigurerAdapter, как показано ниже, но вызов не идет через метод настройки
@Configuration
@Slf4j
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/api/*").authenticated().and().csrf().disable();
}
}
Подозреваемая область -
1 - Возможно, проблема вкорень другого контекста
2 - соответствующая конфигурация Web.xml в COM-приложении (отсутствие web.xml для объявления фильтра по шаблону URL Rest API)