Как исправить ошибку org.apache.shiro.UnavailableSecurityManagerException с помощью SecurityUtils.getSubject()

  1. Я пытаюсь прочитать данные с веб-сервера, который находится по какому-то URL.

  2. В нашей компании я использую eCommerce API, который работает с данными с веб-сервера.

  3. Чтобы получить данные, сначала мне нужно создать пул данных с веб-сервера.

  4. Чтобы создать пул данных, мне нужно настроить соединение.

  5. Одна часть шага, который мне нужно настроить для подключения, — это функция getSession(), которая использует API Широ (org.apache.shiro.SecurityUtils), поэтому каждый раз, когда я пытаюсь установить соединение с веб-сервером и использовать данные из веб- server Я становлюсь исключением Exception Exception в потоке main org.apache.shiro.UnavailableSecurityManagerException: нет SecurityManager, доступного для вызывающего кода, либо привязанного к org.apache.shiro.util.ThreadContext, либо как статический синглтон vm. Это недопустимая конфигурация приложения.

Прежде чем написать этот вопрос, я пытался посмотреть логи и прочитать о классах и проблемах, которые там описаны.

Все это работает на Windows 10, Java 8, Payara Server (Glassfish), с EJBAPI и некоторыми API для электронной коммерции.

Импорт, который я использую

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.InvalidSessionException;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;

at

ContentConfiguration conf = new ContentConfiguration(
                getSessionId(), 
                Constant.ENTITYMODELL, 
                Constant.EMPTY, 
                context);
protected static Session getSession()
{
    Subject subject = SecurityUtils.getSubject();
    if(subject.isAuthenticated())
        return subject.getSession();
    else
        return null;
}

Сообщение об ошибке

Exception in thread "main" org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton.  This is an invalid application configuration.
    at org.apache.shiro.SecurityUtils.getSecurityManager(SecurityUtils.java:123)
    at org.apache.shiro.subject.Subject$Builder.<init>(Subject.java:627)
    at org.apache.shiro.SecurityUtils.getSubject(SecurityUtils.java:56)
    at de.kolb.demo.data.ServiceLocator.getSessionId(ServiceLocator.java:15)
    at de.kolb.demo.logic.CommonTest.getCommonData(CommonTest.java:32)
    at de.kolb.demo.presentation.ContentDirector.main(ContentDirector.java:34)

person blizardinka    schedule 16.05.2019    source источник
comment
Это для тестового кода? (я вижу CommonTest в вашей трассировке стека). Если нет, есть ли у вас исключение, которое показывает полную трассировку из веб-запроса? (или это выделено в отдельную ветку?)   -  person Brian Demers    schedule 18.05.2019


Ответы (1)


Я хочу получить ответ, который представляет ситуацию в моей компании, но многие принципы, которые я буду описывать, связаны с общей задачей в хабе Широ.

1. Моя проблема связана с getSessionId() введите здесь описание изображения

2.getSessionId() это функция из API компании. В этой функции я вызываю org.apache.shiro.SecurityUtils.getSubject() введите здесь описание ссылки

  1. В этот момент я подумал об исключении Message No SecurityManager accessible to the calling code.... Затем я просматриваю документацию Широ здесь введите здесь описание ссылки. Там я обнаружил, что каждый раз, когда я использую приложение, которое использует аутентификацию и авторизацию, мне нужно настроить «SecurityManager» с объектом «Realm».

    4. Это небольшая инструкция и подробная инструкция представлены на сайте shiro введите здесь описание ссылки

person blizardinka    schedule 20.05.2019