Открытый контроллер для регистрации возвращает 403

Версия платформы 7.2.4
Версия rest аддона 7.2.0

  • Создал новый куба проект

  • Добавил аддон rest api

  • Добавил пользователю роль разрешающую использовать рест

  • Добавил в модуль web свой контроллер:

      package com.company.resttest.rest;
    
      import org.springframework.web.bind.annotation.*;
    
    
      @RestController
      @RequestMapping("sign")
      public class SignController {
    
          @ResponseBody
          @RequestMapping(value = "/up", method = RequestMethod.POST)
          public String register() {
              return "my-response";
          }
      }
    
  • Добавил файл rest-dispatcher-spring.xml

    <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:context="http://www.springframework.org/schema/context"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
                             http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
                             http://www.springframework.org/schema/context
                             http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    
      <context:component-scan base-package="com.company.resttest.rest"/>
    </beans>
    
  • В web-app.properties добавил
    cuba.restSpringContextConfig = +com/company/resttest/rest-dispatcher-spring.xml

  • В итоге при обращении к http://localhost:8080/app/rest/sign/up получаю 403 (запрос делаю при помощи cubaREST)

Я ожидал что авторизация не нужна так как в файле rest-dispatcher-spring.xml нет описания секьюрити. Хотелось бы как то запилить регистрацию через рест

Делал по вот этим докам
Вопрос что делаю не так?

Воспроизвёл твои шаги по созданию проекта.
POST-запрос с помощью curl или postman отрабатывает нормально без всякой аутентификации:

curl -X POST http://localhost:8080/app/rest/sign/up

Можешь попробовать? Возможно какая-то проблема в том, как ты дергаешь этот URL. Если не получится решить, приложи, пожалуйста, свой сэмпл-проект и код, котором ты вызываешь эту урлу.

1 симпатия

Да если запрос делать курлом, то работает, но если делать из браузера - например при помощи fetch, то браузер блокирует запрос если сервер не присылает в заголовке что с этого домена можно запросы делать.

В итоге rest-dispatcher-spring.xml необходимо добавить

<security:http pattern="/rest/**"
                   create-session="stateless"
                   entry-point-ref="oauthAuthenticationEntryPoint"
                   xmlns="http://www.springframework.org/schema/security">
        <!-- Specify one or more protected URL patterns-->
        <intercept-url pattern="/rest/sign/up" access="isAnonymous()"/>
        <anonymous enabled="true"/>
        <csrf disabled="true"/>
        <cors configuration-source-ref="cuba_RestCorsSource"/>
        <custom-filter ref="resourceFilter" before="PRE_AUTH_FILTER"/>
        <custom-filter ref="cuba_AnonymousAuthenticationFilter" after="PRE_AUTH_FILTER"/>
</security:http>

Тогда вызов из браузера начинает работать.
Предлагаю добавить это в доки в файл rest-dispatcher-spring.xml или сделать какую-то сноску что это пример только для авторизации другого бэк-енда/среднего слоя и для того что бы это заработало из браузера добавте этот код или см другие доки

Спасибо за помощь!