No security context bound to the current thread

Ошибка RestAPi в custom RestController-е java.lang.SecurityException: No security context bound to the current thread
Версия cuba 7.2.13 version.
Error: Request processing failed; nested exception is java.lang.SecurityException: No security context bound to the current thread
ниже код:

Copy

package com.sample.app.web.rest;

import com.haulmont.cuba.core.global.DataManager;
import com.haulmont.cuba.core.global.Metadata;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.inject.Inject;
import java.util.Map;


@RestController
@RequestMapping(“restController”)
public class RestController {
@Inject
protected DataManager dataManager;
@Inject
protected Metadata metadata;

@PostMapping("create")
public ResponseEntity<Map> create() {
    Person person = metadata.create(Person.class);
    person.setName("Johnny");
    dataManager.commit(person);
    return new ResponseEntity<>(HttpStatus.CREATED);
}
}

com.haulmont.cuba.security.app.Authentication мне не доступен в restController-е так как он находится в пакете com.sample.app.web.rest

Вы хотите закрывать контроллер аутентификацией, или он должен быть доступен публично?

Я хочу добавить @Authentication в RestController для манипуляции с сущностями.

Чтобы исправить данную ошибку [No security context bound to the current thread] - я должен добавить в @Authentication, но он мне в модуле web, где находится мой restController не доступен.

Способ решения вашей задачи зависит от того, закрыт контроллер аутентификацией или публичен.

@Authentication недоступен вне core модуля, поэтому об этой аннотации говорить бессмысленно, она не подходит.

Какие есть другие способы для манипуляции с сущностями в restController?

  1. Пробовал создать restController в модуле core получил - 404
  2. Пробовал перенести логику в сервис затем вызывать сервис вернул ошибку - [No security context bound to the current thread]

Вы можете ответить на мой вопрос, или вы не поняли, что я спросил?

не совсем понятен ваш вопрос, вы имеете ввиду сервис без авторизации или с авторизации должен быть? Если так, то сервис с авторизации

  1. Тут есть пример, как обернуть в авторизацию вызов MVC метода.
    https://github.com/cuba-labs/mvc-public-logo-sample/blob/master/modules/web/src/com/sample/logos/web/controller/LogoController.java
    Здесь действия выполняются из-под сессии пользователя Anonymous без проверки логина/пароля, и на anonymous роль нужно назначить необходимые разрешения на операции по сущностям.

  2. Если контроллер должен быть защищен той же OAuth аутентификацией, что и в REST API аддоне, то здесь есть рецепт: CUBA REST API

  3. Если вы хотите явно проверять приходящие откуда-то логин/пароль какого-либо пользователя, то нужно вызывать методы com.haulmont.cuba.security.auth.AuthenticationService
    и потом проставлять полученную UserSession в контекст тем же образом, как сделано в примере (1).