当前位置: 首页 > 知识库问答 >
问题:

创建自定义Glass乐于V3领域

叶元凯
2023-03-14

我正在尝试为Glassfish V3.1.1创建自定义领域,但使用BASIC方法登录时出现了一些LogiException:

[#|2012-10-11T22:57:21.625 0200|FINE|glass的鱼3.1.2|org.apache.catalina.authenticator.身份验证库|_ThreadID=35;_ThreadName=线程2; ClassName=org.apache.catalina.authenticator.身份验证库;方法名称=调用;|安全检查请求获取 /testForMySimRealm/S1|#]

[#|2012-10-11T22:57:21.625 0200|FINE|glass的鱼3.1.2|org.apache.catalina.authenticator.身份验证库|_ThreadID=35;_ThreadName=线程2; ClassName=org.apache.catalina.authenticator.身份验证库;方法名称=调用;|调用hasUserDataPer的()|#]

[#|2012-10-11T22:57:21.625 0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=35;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;MethodName=hasUserDataPermission;|[Web-Security][ hasUserDataPermission ] Principal: null ContextPath: /testForMySimRealm|#]

[#|2012-10-11T22:57:21.625 0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=35;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;MethodName=invokeWebSecurityManager;|[Web-Security] [ hasResourcePermission ] Principal: null ContextPath: /testForMySimRealm|#]

[# | 2012-10-11t 22:57:21.625 0200 | FINE | glassfish 3 . 1 . 2 | org . Apache . catalina . authenticator . authenticator base | _ ThreadID = 35;_ ThreadName = Thread-2;class name = org . Apache . catalina . authenticator . authenticator base;方法名=调用;|调用authenticate()|#]

[#|2012-10-11T22:57:21.640 0200|FINE|glass的鱼3.1.2|org.apache.catalina.authenticator.身份验证基础|_ThreadID=35;_ThreadName=线程2; ClassName=org.apache.catalina.authenticator.身份验证基础;方法名称=调用;|失败的身份验证()测试|#]

[#|2012-10-11T22:57:21.640 0200|FINE|glassfish3.1.2|org.apache.catalina.connector.OutputBuffer|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.OutputBuffer;方法名称=设置转换器;|编码:ISO-8859-1|#]

[#|2012-10-11T22:57:21.640 0200|FINE|glassfish3.1.2|org.apache.catalina.connector.OutputBuffer|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.OutputBuffer;MethodName=realWriteBytes;|realWrite(b, 0, 1073) com.sun.grizzly.tcp.Response@192d307|#]

[#|2012-10-11T22:57:21.640 0200|FINEST|glassfish3.1.2 |org.apache.catalina.connector.InputBuffer|_ThreadID=35;_ThreadName=Thread-2;ClassName=org.apache.cacatalina.connecter.InputBuffer;MethodName=回收;|recycle()|#]

[# | 2012-10-11t 22:57:21.640 0200 | FINE | glassfish 3 . 1 . 2 | org . Apache . catalina . connector . output buffer | _ ThreadID = 35;_ ThreadName = Thread-2;class name = org . Apache . catalina . connector . output buffer;MethodName =再循环;|recycle()|#]

[#|2012-10-11T22:57:24.625 0200|FINE|glass的鱼3.1.2|org.apache.catalina.authenticator.身份验证库|_ThreadID=36;_ThreadName=线程2; ClassName=org.apache.catalina.authenticator.身份验证库;方法名称=调用;|安全检查请求获取 /testForMySimRealm/S1|#]

[# | 2012-10-11t 22:57:24.625 0200 | FINE | glassfish 3 . 1 . 2 | org . Apache . catalina . authenticator . authenticator base | _ ThreadID = 36;_ ThreadName = Thread-2;class name = org . Apache . catalina . authenticator . authenticator base;方法名=调用;|调用hasuserdatapapermission()| #]

[#|2012-10-11T22:57:24.625 0200|FINE|glass

[#|2012-10-11T22:57:24.625 0200|FINE|glass的3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=36;_ThreadName=线程2; ClassName=com.sun.web.security.Realm适配器;方法名称=调用WebSecurityManager;|[Web-Security][hasResourcePer的]主体:null ContextPath: /testForMySimRealm|#]

[#|2012-10-11T22:57:24.625 0200|FINE|glassfish3.1.2 |org.apache.catalina.authenticator.AuthenticatorBase |_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.cacatalina.auth验证器.AuthenticaorBase;MethodName=invoke;|调用authenticate()|#]

[#|2012-10-11T22:57:24.625 0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=36;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;方法名称=身份验证;|用于身份验证用户/密码的 Tomcat 回调|#]

[#|2012-10-11T22:57:24.625 0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=36;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;方法名称=身份验证;|usename = j|#]

[#|2012-10-11T22:57:24.625 0200|警告|glass

[#|2012-10-11T22:57:24.625 0200|FINE|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=36;_ThreadName=Thread-2;ClassName=com.sun.web.security.RealmAdapter;MethodName=authenticate;|Exception com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Entrée NULL non valide : nom at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:394) at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:240) at com.sun.enterprise.security.auth.login.LoginContextDriver.login(LoginContextDriver.java:153) atcom.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:514) at com.sun.web.security.RealmAdapter.authenticate(RealmAdapter.java:455) at org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:169) at com.sun.web.security.RealmAdapter.invokeAuthenticateDelegate(RealmAdapter.java:1333) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:551) atorg.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:623) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) atcom.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722) 原因: javax.security.auth.login.LoginException: Entrée NULL non valide : nom at javax.security.auth.login.LoginContext.init(LoginContext.java:246) atjavax.security.auth.login.LoginContext.(LoginContext.java:382) at javax.security.auth.login.LoginContext.(LoginContext.java:459) at com.sun.enterprise.security.auth.login.LoginContextDriver.doPasswordLogin(LoginContextDriver.java:381) ...还有 28 个 |#]

[#|2012-10-11T22:57:24.625 0200|FINE|glass的鱼3.1.2|org.apache.catalina.authenticator.身份验证库|_ThreadID=36;_ThreadName=线程2; ClassName=org.apache.catalina.authenticator.身份验证库;方法名称=调用;|失败的身份验证()测试|#]

[#|2012-10-11T22:57:24.625 0200|FINE|glassfish3.1.2|org.apache.catalina.connector.OutputBuffer|_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.catalina.connector.OutputBuffer;方法名称=设置转换器;|编码:ISO-8859-1|#]

[#|2012-10-11T22:57:24.625 0200|FINE|glassfish3.1.2 |org.apache.catalina.connector.OutputBuffer|_ThreadID=36;_ThreadName=Thread-2;ClassName=org.apache.cacatalina.connecter.OutputBuffer;MethodName=realWriteBytes;|realWrite(b,0,1073)com.sun.grizzly.tcp.Response@7e592c|#]

[#|2012-10-11T22:57:24.625 0200|FINEST|glass

[#|2012-10-11T22:57:24.625 0200|FINE|glass的3.1.2|org.apache.catalina.connector.输出缓冲区|_ThreadID=36;_ThreadName=线程2; ClassName=org.apache.catalina.connector.输出缓冲区;方法名称=回收;|回收()|#]

以下是我的领域类:

CustomSimLoginModule 扩展了 AppservPasswordLoginModule :

package com.sim;

import javax.security.auth.login.LoginException;

import com.sun.appserv.security.AppservPasswordLoginModule;

public class CustomSimLoginModule extends AppservPasswordLoginModule {
@Override
protected void authenticateUser() throws LoginException {
    // TODO Auto-generated method stub



    System.out.println("AUTHENTIFICATION !!");

    String[] grpList = {"ADMIN"};


    commitUserAuthentication(grpList);
}

}

CustomSimRealm扩展了AppservRealm:

package com.sim;

import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;

import com.sun.appserv.security.AppservRealm;
import com.sun.enterprise.security.auth.realm.BadRealmException;
import com.sun.enterprise.security.auth.realm.InvalidOperationException;
import com.sun.enterprise.security.auth.realm.NoSuchRealmException;
import com.sun.enterprise.security.auth.realm.NoSuchUserException;


public class CustomSimRealm extends AppservRealm {

    @Override
    public void init(Properties properties) throws BadRealmException, NoSuchRealmException {

        System.out.println("CustomSimRealm->init");

        Enumeration<?> names = properties.propertyNames();
        String name = null;

        while(names.hasMoreElements()){
            name = (String)names.nextElement();
            System.out.println("name->" + name + " value->" + properties.getProperty(name));
        }
    }

    @Override
    public String getAuthType() {
        return "BASIC";
    }

    @Override
    public Enumeration<String> getGroupNames(String username)
            throws InvalidOperationException, NoSuchUserException {


        Vector<String> v = new Vector<String>();
        v.add("ADMIN");

        return v.elements();
    }   


}

这两个类通过maven打包到JAR文件中,并具有以下依赖关系:

<dependency>
        <groupId>org.glassfish.main.security</groupId>
        <artifactId>security</artifactId>
        <version>3.1.2</version>
    </dependency>

JAR文件被复制到${GLASSFISH}/glassfish/domains/domain1/lib目录中,我用:

 simRealm {
    com.sim.CustomSimLoginModule required;
};

和domain.xml与:

  <auth-realm name="sim-realm" classname="com.sim.CustomSimRealm">
      <property name="prop1" value="test propriete 1"></property>
      <property name="prop2" value="test propriete 2"></property>
      <property description="null" name="jaas-context" value="simRealm"></property>
    </auth-realm>

Glassfish启动时没有抛出异常,但是当用户输入凭证时抛出上述异常。

请问我做错了什么?

PS:没有使用Glassfish create-auth realm命令,我手动更改了登录。conf和域。xml,这可能是问题所在?

谢谢你的想法

奥利维尔

共有1个答案

茹元魁
2023-03-14

未在CustomSimRealm中调用< code > super . init(properties)。现在问题解决了

 类似资料:
  • 问题内容: 注释如何与Java一起使用?以及如何创建这样的自定义注释: 基本上,我需要保留的POJO在持久化时像这样进行序列化: 这样,实际的生成/持久对象是这样的: 任何想法如何实现这一点? 问题答案: 如果创建自定义注释,则必须使用此处的 API 示例进行处理。您可以参考如何声明注释。 这是Java中的示例注释声明的样子。 并被称为。 表示您想在运行时保留注释,并且可以在运行时访问它。 表示您

  • 问题内容: 我在Django中启用了用户身份验证模块,但是当我使用它时,它仅询问用户名和两个密码/密码确认字段。我还希望将电子邮件和全名字段全部设置为必填字段。 我已经做到了: 现在,该表单显示了新字段,但是没有将它们保存到数据库中。 我怎样才能解决这个问题? 问题答案: 用户模型中没有调用此字段。 如果要使用原始模型存储名称,则必须将其分别存储为名字和姓氏。 编辑: 如果您只希望表单中的一个字段

  • 我正在使用helm charts创建部署微服务,通过执行helm create创建包含部署、服务和入口的基本图表,但我没有其他配置,如水平pod自动缩放器、pod中断预算。

  • 我们不仅可以分配事件处理程序,还可以从 JavaScript 生成事件。 自定义事件可用于创建“图形组件”。例如,我们自己的基于 JavaScript 的菜单的根元素可能会触发 open(打开菜单),select(有一项被选中)等事件来告诉菜单发生了什么。另一个代码可能会监听事件,并观察菜单发生了什么。 我们不仅可以生成出于自身目的而创建的全新事件,还可以生成例如 click 和 mousedow

  • 默认情况下,Navicat Monitor 从受监控的实例收集一组预设的服务器指标。你可能想要添加自己的查询,以收集特定实例的一些自定义性能指标,并在指标值超过某些阈值和持续时间时接收有关自定义数据的警报。若要配置自定义指标,请前往“配置”->“自定义指标”。 创建自定义指标和警报 在自定义指标页面中,点击“+ 新建自定义指标”。 【步骤一】输入自定义指标的定义: 指标名 输入自定义指标的名。 描

  • 我一直在尝试使用 Openshift Online v3 来托管一个 Web 应用程序。它适用于红帽提供的域,但我无法让路由工作以使其在任何其他域上工作。我得到的只是: 应用程序不可用 应用程序当前未在此终结点处为请求提供服务。它可能尚未启动或仍在启动。 您看到此页面的可能原因: 有人知道如何在Openshift v3中创建自定义域吗?