Как исправить ошибку «org.apache.shiro.UnavailableSecurityManagerException» с помощью «SecurityUtils.getSubject ()» - PullRequest
0 голосов
/ 16 мая 2019

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

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

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

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

5. Одной из частей на шаге «Мне нужно настроить соединение» является функция getSession (), которая использует API-интерфейс Shiro (org.apache.shiro.SecurityUtils). поэтому каждый раз, когда я пытаюсь установить соединение с веб-сервером и использовать данные с веб-сервера, я становлюсь исключением «Исключение в потоке» 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;

в

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)

1 Ответ

0 голосов
/ 20 мая 2019

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

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

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

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

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

...