An Authentication object was not found in the SecurityContext. With Token

Здравствуйте, не могу достучаться до метода REST API. Есть собственная авторизация по логину и паролю, токен получаю, у пользователя есть роль для rest.
Авторизация была сделана по примеру cuba, но без использования LoginService тк не находит нужный класс(пока не понял что нужно подключить), поэтому реализовал иначе

@RequestMapping("/auth")
public class AuthController {

    private static Logger log = LoggerFactory.getLogger(AuthController.class);

    @Inject
    private OAuthTokenIssuer oAuthTokenIssuer;
    @Inject
    private Configuration configuration;
    @Inject
    private DataManager dataManager;
    @Inject
    private MessageTools messageTools;
    @Inject
    private AuthenticationService authenticationService;
    @Inject
    protected MessageBundle messageBundle;

    @PostMapping()
    public ResponseEntity authorization(@RequestBody User user) {
        // set security HTTP headers to prevent browser caching of security token
        HttpHeaders headers = new HttpHeaders();
        headers.set(HttpHeaders.CONTENT_TYPE, "application/json");
        headers.set(HttpHeaders.CACHE_CONTROL, "no-store");
        headers.set(HttpHeaders.PRAGMA, "no-cache");

        // obtain system session to be able to call middleware services
        UserSession systemSession;
        try {
            LoginPasswordCredentials loginPasswordCredentials = new LoginPasswordCredentials(user.getLogin(), user.getPassword());
            AuthenticationDetails authenticationDetails = authenticationService.authenticate(loginPasswordCredentials);
            systemSession = authenticationDetails.getSession();
        } catch (LoginException e) {
            return new ResponseEntity<>(headers, HttpStatus.UNAUTHORIZED);
        }

        // set security context
        AppContext.setSecurityContext(new SecurityContext(systemSession));
        try {
            // generate token
            OAuthTokenIssuer.OAuth2AccessTokenResult tokenResult =
                    oAuthTokenIssuer.issueToken(user.getLogin(), messageTools.getDefaultLocale(), Collections.emptyMap());
            OAuth2AccessToken accessToken = tokenResult.getAccessToken();

            return new ResponseEntity<>(accessToken, headers, HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST);
        } finally {
            // clean up security context
            AppContext.setSecurityContext(null);
        }
    }
}

при обращении к REST методу в заголовке пишу
{“access_token”:“Bearer b41807a3-f9d1-4bb3-926d-9d7a47171723”}

Сам Rest service

@Service(EntityCheckApiService.NAME)
public class EntityCheckApiServiceBean implements EntityCheckApiService {

    @Inject
    private Logger log;
    @Inject
    private Messages messages;
    @Inject
    private DataManager dataManager;

    private Gson gson;

    protected String packageString = this.getClass().getPackage().toString();

    private static final String REGEX_NUMBER = "^\\d+$";
    private static final Pattern patternNumber = Pattern.compile(REGEX_NUMBER);

    protected static final String CONTRACT_BY_INN_KPP_OBDNSI_QUERY = "select e from *** e where e.inn = :inn and e.kpp = :kpp and e.codeObdnsi = :codeObdnsi";
    protected static final String INN = "inn";
    protected static final String KPP = "kpp";
    protected static final String CODE_OBDNSI = "codeObdnsi";

    @PostConstruct
    protected void init() {
        gson = new GsonBuilder()
                .excludeFieldsWithoutExposeAnnotation()
                .create();
    }

    public EntityServiceResult contragentCheck(String inn, String kpp, String codeObdnsi, String 
       regNoContract) {
        EntityServiceResult entityServiceResult = new EntityServiceResult();

        if (inn == null || !patternNumber.matcher(inn).find() ||
                kpp == null || !patternNumber.matcher(kpp).find() ||
                codeObdnsi == null || !patternNumber.matcher(codeObdnsi).find()) {
            entityServiceResult.setSuccess(false);
            entityServiceResult.setErrorMessage(messages.getMessage(packageString, 
       "EntityCheckApiServiceBean.inputDataError"));
            return entityServiceResult;
        }
        try {
            Contragent contragent = dataManager.load(Contragent.class)
                    .query(CONTRACT_BY_INN_KPP_OBDNSI_QUERY)
                    .parameter(INN, inn)
                    .parameter(KPP, kpp)
                    .parameter(CODE_OBDNSI, codeObdnsi)
                    .view("contragent-edit-view")
                    .one();

            String jsonMessage = gson.toJson(createContragentModel(contragent));
            entityServiceResult.setSuccess(true);
            entityServiceResult.setSuccessMessage(jsonMessage);
            return entityServiceResult;
        } catch (Exception e) {

            log.error(messages.getMessage(packageString, 
       "EntityCheckApiServiceBean.contractLoadError"), e);
            entityServiceResult.setSuccess(false);
            entityServiceResult.setErrorMessage(e.getMessage());

            return entityServiceResult;
        }
    }

    public ContragentModel createContragentModel(Contragent contragent) {
        ContragentModel contragentModel = new ContragentModel();

        contragentModel.setContragentId(contragent.getContragentId());

        return contragentModel;
    }
}

Предполагаю проблема или в моей авторизации или в видимости сервиса.

Добрый день,
Приложите пожалуйста детали исключения вместе со стектрейсом (на какой строчке падает), без этого непонятно.

"error": "unauthorized",
    "error_description": "An Authentication object was not found in the SecurityContext"

в ответ получаю только сообщение. ошибок нет. Токен исправно получаю, но именно при обращении к rest service в ответ получаю сообщение об не авторизации

Здравствуйте,
Хотелось бы уточнить момент: будет ли корректно работать вызов сервиса, если использовать стандартный алгоритм аутентификации в REST через URL: http://localhost:8080/app/rest/v2/oauth/token

А так же в случае вашей аутентификации через AuthController контроллер, попробуйте проверить сохраняется ли корректно токен доступа.
Для этого

  1. Аутентифицируйтесь.
  2. При передаче запроса в сервис в дебаг проверь заходит ли debug в методы
    com.haulmont.addon.restapi.api.auth.ClientProxyTokenStore#readAuthentication(java.lang.Sring)
    или
    com.haulmont.addon.restapi.api.auth.ClientProxyTokenStore#readAccessToken
  3. Возвращаются из этих методов какие либо объекты или результат вызова методов NULL

Только сейчас получилось получить токен через стандартный вызов, но к сожалению по полученному токену сервис тоже недоступен. Поставил бряки на указанных вами методах, ни в одном из случаев туда не попал, ни из базовой аутентификации, ни из своей и даже при авторизации на веб портале. Почему токен может не “сохранятся”? Настройки rest?

Каким запросом вызывается сервис (и какой URL это соответствует)? Не получится ли у вас сделать пример проекта воспроизводящий проблему?
Не должно быть такого, что токен не сохраняется, даже при базовой аутентификации.

при обращении к своему методу в сервисе http://localhost:8080/app/rest/v2/services/EntityCheckApiService/contragentCheck
к методу написанному коллегой
http://localhost:8080/app/rest/v2/services/OrderApiService/submitOrder
один и тот же ответ

 "error": "unauthorized",
    "error_description": "An Authentication object was not found in the SecurityContext"`

При обращении через доступный rest и вызов нём dataManager, получаю свой кастомный ответ с ошибкой

   "success": false,
    "successMessage": null,
    "errorMessage": "No security context bound to the current thread"

в заголовке пишу
access_token: Bearer 47f621f6-3cf2-480c-91cd-df7f723b058e

Сам проект не могу отправить, но похожий если только чуть позже