是否有Java EE方式来更改用户?

时间:2011-06-03 06:32:13

标签: java java-ee

假设以下方法:

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标准方法或不。

2 个答案:

答案 0 :(得分:1)

处理登录/注销的标准方式是JAAS。我不知道是否公平地说它是 标准,但它得到我迄今为止使用的Java EE服务器(JBoss,Websphere)的支持,显然也是由Sybase EAS支持的

例如,JBoss为数据库和LDAP提供了几个预定义的登录模块,以及您必须为您的应用程序进行声明性配置。但是,您也可以通过实现相应的界面(javax.security.auth.spi.LoginModule)完全自由地编写自己的登录模块。

看看the JAAS Reference Guide

关于您的代码段:我不知道这是否适用于其他应用服务器。这是EJB 1.1,因此真的很老了。你绝对应该看看EJB 3.1,并考虑将应用程序现代化。

答案 1 :(得分:0)

如果我做对了,这应该通过多个方法调用将用户名链接到EJB,在我看来这是一个状态。我想这个标准是用setUser(String name)方法创建一个有状态SessionBean。在无状态bean中,您必须在每个方法调用上传递userName(或属性对象)。