假设以下方法:
Test getTest()
{
Properties props = new Properties();
props.put(javax.naming.Context.SECURITY_PRINCIPAL, "OtherUser");
props.put(javax.naming.Context.SECURITY_CREDENTIALS, "OtherPassword");
InitialContext ic = new InitialContext(props);
return (TestHome)PortableRemoteObject.narrow(ic.lookup("ejb/Test"),
TestHome.class).create();
}
如果使用用户“MyUser”从客户端调用此方法(在EJB中),我希望它返回具有不同调用者主体的EJB。然后,客户端进行的测试呼叫将被记录为来自“OtherUser”。即我已经以编程方式更改了给定EJB的客户端调用者主体。
但是,我在Java EE规范中找不到关于此的文本,虽然它适用于我们当前的Java EE应用服务器(Sybase EAS 4.1),但我想问你这是否是Java EE标准方法或不。
答案 0 :(得分:1)
处理登录/注销的标准方式是JAAS。我不知道是否公平地说它是 标准,但它得到我迄今为止使用的Java EE服务器(JBoss,Websphere)的支持,显然也是由Sybase EAS支持的
例如,JBoss为数据库和LDAP提供了几个预定义的登录模块,以及您必须为您的应用程序进行声明性配置。但是,您也可以通过实现相应的界面(javax.security.auth.spi.LoginModule
)完全自由地编写自己的登录模块。
关于您的代码段:我不知道这是否适用于其他应用服务器。这是EJB 1.1,因此真的很老了。你绝对应该看看EJB 3.1,并考虑将应用程序现代化。
答案 1 :(得分:0)
如果我做对了,这应该通过多个方法调用将用户名链接到EJB,在我看来这是一个状态。我想这个标准是用setUser(String name)
方法创建一个有状态SessionBean。在无状态bean中,您必须在每个方法调用上传递userName(或属性对象)。