Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EE/JBoss AS 6中的预认证用户_Java_Spring_Jakarta Ee_Jboss_Ejb - Fatal编程技术网

Java EE/JBoss AS 6中的预认证用户

Java EE/JBoss AS 6中的预认证用户,java,spring,jakarta-ee,jboss,ejb,Java,Spring,Jakarta Ee,Jboss,Ejb,我正在将一些javaee模块从Spring迁移到EJB,现在面临的问题是,在调用服务方法之前,我需要某种预先身份验证 这个问题其实很简单。一个调用来自内部协议处理程序(一些线程启动专有协议处理程序并使用自定义TCP协议接收请求)。此连接尚未对用户进行身份验证,并希望下一步调用服务方法。此服务方法需要用于处理的主体信息(用户名) 因此,在春季,我们只是将SecurityContext推送到本地线程,并在调用完成时将其删除 协议处理程序->设置SecContext->调用->删除SexContext

我正在将一些javaee模块从Spring迁移到EJB,现在面临的问题是,在调用服务方法之前,我需要某种预先身份验证

这个问题其实很简单。一个调用来自内部协议处理程序(一些线程启动专有协议处理程序并使用自定义TCP协议接收请求)。此连接尚未对用户进行身份验证,并希望下一步调用服务方法。此服务方法需要用于处理的主体信息(用户名)

因此,在春季,我们只是将SecurityContext推送到本地线程,并在调用完成时将其删除

协议处理程序->设置SecContext->调用->删除SexContext->结束


JavaEE/JBoss中有类似的东西吗?我知道有“@RunAs”结构,但我不知道它们是否可以编程使用。或者有没有一种使用JAAS LoginContext类“登录”的方法?但是我该如何配置JAAS呢?

如果这纯粹是为了在JAAS上下文中获得一个标识,那么您应该能够执行以下操作:

final String username; // get this from somewhere
Princpal principal = new Principal() {
    public String getName() {
        return username;
    }
};
Subject subject = new Subject(true, Collections.singleton(principal), Collections.emptySet(), Collections.emptySet());
Subject.doAs(subject, new PrivilegedAction<Void>() {
    public Void run() {
       // do your method call here
    }
});
最终字符串用户名;//从某处得到这个
Princpal主体=新主体(){
公共字符串getName(){
返回用户名;
}
};
Subject Subject=新主题(true,Collections.singleton(主体),Collections.emptySet(),Collections.emptySet());
Subject.doAs(Subject,newprivilegedaction(){
公开募捐{
//你的方法在这里调用吗
}
});
请注意,您可以通过将PrivilegedAction绑定到Void以外的类型来从PrivilegedAction返回值,并通过实现PrivilegedExceptionAction来引发异常

显然,如果您对主体有一个更复杂的概念,您可以使用它(实现toString、hashCode和equals将是一个好主意)