如何使用“ SecurityUtils.getSubject()”修复“ org.apache.shiro.UnavailableSecurityManagerException”错误

时间:2019-05-16 10:30:52

标签: java glassfish ejb shiro payara

1。我尝试从位于某个URL处的Web服务器读取数据。

2。在我们公司中,我使用电子商务API,它可以处理来自Web服务器的数据。

3。首先,要检索数据,我需要从Web服务器中收集数据。

4。要建立数据池,我需要配置连接。

5。步骤“我需要配置连接”的一部分是函数getSession(),该方法使用Shiro api(org.apache.shiro.SecurityUtils) 因此,每隔一段时间,当我尝试与网络服务器建立连接并使用来自网络服务器的数据时,我就成为异常“线程”主线程中的异常” org.apache.shiro.UnavailableSecurityManagerException:调用代码无法访问SecurityManager绑定到org.apache.shiro.util.ThreadContext或作为vm静态单例。这是无效的应用程序配置。“

在写这个问题之前,我试图看一下日志并阅读abotut类和问题,这些在这里描述。

这一切都可以在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 :(得分:0)

我想得到代表我公司情况的答案,但有很多原则,我将描述与Shiro枢纽中常见问题有关的联系。

1。我的问题与getSessionId() enter image description here

有关

2。getSessionId()是公司API的功能。在此函数中,我调用org.apache.shiro.SecurityUtils.getSubject() enter link description here

  1. 此刻,我想到了异常消息No SecurityManager accessible to the calling code...。比我在enter link description here上查看Shiro文档。我在那里发现,每次使用Aplication(身份验证和自动身份验证)时,都需要使用“ Realm”对象配置“ SecurityManager”。

    4.shiro网站enter link description here

  2. 上的简短说明和详细说明