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