httpinvoker не работает, если на сервере включена защита csrf

У меня есть два весенних веб-приложения, защищенных пружинной защитой. Эти два приложения общаются друг с другом через весенний httpInovoker. Контроль доступа работает нормально. Но когда я включаю <csrf/> в весенней безопасности под <http auto-config="true"> тег httpinvoker возвращает статус 403. Stacktrace приведен ниже. Но тот же код успешно выполняется без защиты csrf. Пожалуйста помоги

org.springframework.remoting.RemoteAccessException: Could not access HTTP invoker remote service at [http://172.28.1.162:6060/ReporterRepository/ExposedLinkService.http]; nested exception is java.io.IOException: Did not receive successful HTTP response: status code = 403, status message = [Forbidden]

Spring security xml:

<http auto-config="true">
    <intercept-url pattern="/home**" access="ROLE_ADMIN,ROLE_USER" />
            <intercept-url pattern="/admin**" access="ROLE_ADMIN" />
    <form-login 
        login-page="/loginuser" 
        default-target-url="/home" 
        authentication-failure-url="/loginuser?error" 
        username-parameter="username"
        password-parameter="password" />
    <logout logout-success-url="/loginuser?logout"  />
    <!-- enable csrf protection -->
    <csrf/>
</http>

<authentication-manager erase-credentials="false">
    <authentication-provider user-service-ref="myUserDetailsService" > 
    </authentication-provider>
</authentication-manager>

Код вызова:

HttpInvokerProxyFactoryBean HttpinvokerFactory = new HttpInvokerProxyFactoryBean();
HttpinvokerFactory.setServiceInterface(ExposedLinkServiceInterface.class);
HttpinvokerFactory.setServiceUrl(ServiceUrl);
HttpinvokerFactory.setHttpInvokerRequestExecutor(( HttpInvokerRequestExecutor)ServerFramework.getInstance().getBean("httpInvokerRequestExecutor"));//Return the bean httpInvokerRequestExecutor
HttpinvokerFactory.afterPropertiesSet();

ExposedLinkServiceInterface exposedservice = (ExposedLinkServiceInterface) HttpinvokerFactory.getObject();                
List AvailabaleLinks= exposedservice.retrieveAllLinks();

1 ответ

Решение

Ключевым моментом здесь, я думаю, является создание отдельной конфигурации для URL-адресов HttpInvoker:

 <http pattern="/your-httpinvoker-path" create-session="stateless">
   <!-- security for httpinvoker without csrf protection -->
 </http>

 <http auto-config="true">
   <!-- same as before -->
 </http>
Другие вопросы по тегам