Фильтр безопасности Spring имеет преимущество перед фильтром J2EE при вызове REst API из SpringBoot - PullRequest
2 голосов
/ 31 октября 2019

У меня есть 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)

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