Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

How to use a custom JAAS application login module in EJB 2.1

184 views
Skip to first unread message

kar...@msn.com

unread,
Feb 22, 2008, 9:40:28 PM2/22/08
to
Hi, I built a custom JAAS login module, and added to my "Application Logins" following the introduction in "IBM WebSphere Application<br />
Server V6.1 Security Handbook". But I don't know how to use the "Alias" specified in "Application Logins" to secure my EJB project.<br />
<br />
If you have any idea about this, help me out, please!

Paul Ilechko

unread,
Feb 22, 2008, 9:57:58 PM2/22/08
to
kar...@msn.com wrote:
> Hi, I built a custom JAAS login module, and added to my "Application
> Logins" following the introduction in "IBM WebSphere Application
> Server V6.1 Security Handbook". But I don't know how to use the
> "Alias" specified in "Application Logins" to secure my EJB project.
> If you have any idea about this, help me out, please!


What are you actually trying to achieve ?

kar...@msn.com

unread,
Feb 23, 2008, 12:00:28 AM2/23/08
to
OK, Here is my situation:<br />
<br />
<b>1. I built a custom login module as below into my EAR including a very simple EJB with declarative security done by ejb-jar.xml.</b><br />
<hr />
package tutorial;<br />
<br />
import java.io.IOException;<br />
import java.security.Principal;<br />
import java.util.Map;<br />
<br />
import javax.security.auth.Subject;<br />
import javax.security.auth.callback.Callback;<br />
import javax.security.auth.callback.CallbackHandler;<br />
import javax.security.auth.callback.NameCallback;<br />
import javax.security.auth.callback.PasswordCallback;<br />
import javax.security.auth.callback.UnsupportedCallbackException;<br />
import javax.security.auth.login.LoginException;<br />
import javax.security.auth.spi.LoginModule;<br />
<br />
import com.ibm.ws.security.common.auth.WSPrincipalImpl;<br />
import com.ibm.wsspi.security.auth.callback.WSTokenHolderCallback;<br />
<br />
public class WebsphereLoginModule implements LoginModule {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private Subject subject;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private CallbackHandler callbackHandler;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private Map&lt;String, ?&gt; sharedState;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private Map&lt;String, ?&gt; options;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private boolean succeeded = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private String username;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private String password;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private Principal principal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public boolean abort() throws LoginException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public boolean commit() throws LoginException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!succeeded) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;principal = new WSPrincipalImpl("authenticated");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!subject.getPrincipals().contains(principal)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.getPrincipals().add(principal);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void initialize(Subject subject, CallbackHandler callbackHandler, Map&lt;String, ?&gt; sharedState, Map&lt;String, ?&gt; options) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("======================= INITIALIZING MY LOGIN MODULE =========================");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.subject = subject;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.callbackHandler = callbackHandler;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.sharedState = sharedState;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.options = options;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public boolean login() throws LoginException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(callbackHandler == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new LoginException("Error: No CallbackHandler available");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Callback[] callbacks = new Callback[3];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callbacks[0] = new WSTokenHolderCallback("");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callbacks[1] = new NameCallback("user name: ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callbacks[2] = new PasswordCallback("password: ", false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callbackHandler.handle(callbacks);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new LoginException(e.toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (UnsupportedCallbackException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new LoginException("Error" + e.getCallback().toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean requiresLogin = ((WSTokenHolderCallback) callbacks[0]).getRequiresLogin();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(requiresLogin) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username = ((NameCallback) callbacks[1]).getName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password = new String(((PasswordCallback) callbacks[2]).getPassword());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((PasswordCallback) callbacks[2]).clearPassword();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("======================= username: " + username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("======================= password: " + password);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;succeeded = ("max".equals(username) &#38;&#38; "secret".equals(password));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;succeeded = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return succeeded;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public boolean logout() throws LoginException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.getPrincipals().remove(principal);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
<hr />
<br />
<b>2. Added it to "Application Logins" fellows these steps like below.</b><br />
<hr />
You can add a new application JAAS login module configuration to the list.<br />
Perform the following steps:<br />
1. Under Application login configuration, click New.<br />
2. Provide an alias name, for example: MyLoginModule.<br />
3. Click Apply. Do not click OK yet, you are going to define the login module first<br />
before you save the configuration.<br />
4. Click JAAS login modules.<br />
5. Click New in the new window.<br />
6. Provide the fully qualified name (including package name) for your custom<br />
LoginModule implementation in the Module class name field, for example:<br />
com.ibm.itso.MyLoginModuleImpl<br />
Select the Use login module proxy check box, to ensure the class visibility<br />
for applications. For more information about the login module proxy, refer to<br />
the WebSphere Information Center.<br />
Select the authentication strategy, set as REQUIRED for now. The options<br />
include: REQUIRED, REQUISITE, SUFFICIENT, and OPTIONAL. For more<br />
information about the different strategies, refer to the WebSphere Information<br />
Center.<br />
7. Click OK.<br />
8. Save the configuration for WebSphere.<br />
<br />
<b>3. Deploy to Websphere v6.1 using RAD 7, coded a thin client to test my EJB as below</b><br />
<hr />
package tutorial;<br />
<br />
import java.util.HashMap;<br />
import java.util.Hashtable;<br />
import java.util.Map;<br />
<br />
import javax.naming.Context;<br />
import javax.naming.InitialContext;<br />
import javax.rmi.PortableRemoteObject;<br />
import javax.security.auth.Subject;<br />
import javax.security.auth.callback.CallbackHandler;<br />
import javax.security.auth.login.AppConfigurationEntry;<br />
import javax.security.auth.login.Configuration;<br />
import javax.security.auth.login.LoginContext;<br />
import javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag;<br />
<br />
import com.ibm.websphere.security.auth.callback.WSGUICallbackHandlerImpl;<br />
<br />
public class Main {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final Map&lt;String, String&gt; cfg = new HashMap&lt;String, String&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cfg.put("delegate",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"com.ibm.ws.sec urity.common.auth.module.WSLoginModuleImpl");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration configuration = new javax.security.auth.login.Configuration() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private AppConfigurationEntry[] aces = { new AppConfigurationEntry(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;"com.ibm.ws.security.common.auth.module.proxy.WSLoginModuleProxy",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;LoginModuleControlFlag.REQUIRED, cfg) };<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public AppConfigurationEntry[] getAppConfigurationEntry(String name) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "WSLogin".equals(name) ? aces : null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void refresh() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CallbackHandler loginHandler = new WSGUICallbackHandlerImpl();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subject subject = new Subject();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LoginContext lc = new LoginContext("WSLogin", subject, loginHandler,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configuration); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lc.login();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Subject subject = lc.getSubject();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final String s = "max";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hashtable env = new Hashtable();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;env.put(Context.INITIAL_CONTEXT_FACTORY,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"com.ibm.websph ere.naming.WsnInitialContextFactory");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;env.put(Context.PROVIDER_URL, "corbaloc:iiop:localhost:2809");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context ctx = new InitialContext(env);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object obj = ctx.lookup("ejb/tutorial/HelloHome");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloHome home = (HelloHome) PortableRemoteObject.narrow(obj,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloHome.class );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(home.create().hello(s));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<hr />
<br />
<b>5. I got these error message as below, when run my client project</b><br />
<hr />
Feb 23, 2008 11:44:17 AM com.ibm.ws.util.ImplFactory<br />
WARNING: WSVR0073W<br />
Exception in thread "P=256375:O=0:CT" java.rmi.AccessException: CORBA NO_PERMISSION 0x0 No; nested exception is: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.omg.CORBA.NO_PERMISSION: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt; SERVER (id=4773e3aa, host=maxop) TRACE START:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt; org.omg.CORBA.NO_PERMISSION: java.rmi.AccessException: ; nested exception is: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.ibm.websphere.csi.CSIAccessException: SECJ0053E: Authorization failed for /UNAUTHENTICATED while invoking (Home)ejb/tutorial/HelloHome create:2 securityName: /UNAUTHENTICATED;accessID: UNAUTHENTICATED is not granted any of the required roles: jaasAdmin vmcid: 0x0 minor code: 0 completed: No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ws.security.core.SecurityCollaborator.performAuthorization(SecurityCollaborator.java:490)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ws.security.core.EJSSecurityCollaborator.preInvoke(EJSSecurityCollaborator.java:209)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ejs.container.EJSContainer.preInvokeForStatelessSessionCreate(EJSContainer.java:3612)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:2833)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at tutorial.EJSRemoteStatelessHelloHome_650957be.create(EJSRemoteStatelessHelloHome_650957be.java:90)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at tutorial._EJSRemoteStatelessHelloHome_650957be_Tie.create(_EJSRemoteStatelessHelloHome_650957be_Tie.java:161)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at tutorial._EJSRemoteStatelessHelloHome_650957be_Tie._invoke(_EJSRemoteStatelessHelloHome_650957be_Tie.java:86)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:613)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:466)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.rmi.iiop.ORB.process(ORB.java:503)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.CORBA.iiop.ORB.process(ORB.java:1552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.rmi.iiop.Connection.respondTo(Connection.java:2673)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2551)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:62)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:95)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1510)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt; SERVER (id=4773e3aa, host=maxop) TRACE END.<br />
vmcid: 0x0 minor code: 0 completed: No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at com.ibm.CORBA.iiop.UtilDelegateImpl.mapSystemException(UtilDelegateImpl.java:254)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at javax.rmi.CORBA.Util.mapSystemException(Util.java:84)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at tutorial._HelloHome_Stub.create(_HelloHome_Stub.java:228)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at tutorial.Main.main(Main.java:50)<br />
Caused by: org.omg.CORBA.NO_PERMISSION: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt; SERVER (id=4773e3aa, host=maxop) TRACE START:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt; org.omg.CORBA.NO_PERMISSION: java.rmi.AccessException: ; nested exception is: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.ibm.websphere.csi.CSIAccessException: SECJ0053E: Authorization failed for /UNAUTHENTICATED while invoking (Home)ejb/tutorial/HelloHome create:2 securityName: /UNAUTHENTICATED;accessID: UNAUTHENTICATED is not granted any of the required roles: jaasAdmin vmcid: 0x0 minor code: 0 completed: No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ws.security.core.SecurityCollaborator.performAuthorization(SecurityCollaborator.java:490)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ws.security.core.EJSSecurityCollaborator.preInvoke(EJSSecurityCollaborator.java:209)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ejs.container.EJSContainer.preInvokeForStatelessSessionCreate(EJSContainer.java:3612)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:2833)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at tutorial.EJSRemoteStatelessHelloHome_650957be.create(EJSRemoteStatelessHelloHome_650957be.java:90)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at tutorial._EJSRemoteStatelessHelloHome_650957be_Tie.create(_EJSRemoteStatelessHelloHome_650957be_Tie.java:161)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at tutorial._EJSRemoteStatelessHelloHome_650957be_Tie._invoke(_EJSRemoteStatelessHelloHome_650957be_Tie.java:86)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:613)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:466)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.rmi.iiop.ORB.process(ORB.java:503)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.CORBA.iiop.ORB.process(ORB.java:1552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.rmi.iiop.Connection.respondTo(Connection.java:2673)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2551)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:62)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:95)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1510)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt; SERVER (id=4773e3aa, host=maxop) TRACE END.<br />
vmcid: 0x0 minor code: 0 completed: No<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at java.lang.reflect.Constructor.newInstance(Constructor.java:521)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at com.ibm.rmi.iiop.ReplyMessage._getSystemException(ReplyMessage.java:241)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at com.ibm.rmi.iiop.ReplyMessage.getSystemException(ReplyMessage.java:189)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at com.ibm.rmi.iiop.ClientResponseImpl.getSystemException(ClientResponseImpl.java:232)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at com.ibm.rmi.corba.ClientDelegate.invoke(ClientDelegate.java:534)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at com.ibm.CORBA.iiop.ClientDelegate.invoke(ClientDelegate.java:1150)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at com.ibm.rmi.corba.ClientDelegate.invoke(ClientDelegate.java:756)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at com.ibm.CORBA.iiop.ClientDelegate.invoke(ClientDelegate.java:1180)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:484)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at tutorial._HelloHome_Stub.create(_HelloHome_Stub.java:215)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... 1 more<br />
<hr />
<b>6. And none of "System.out.println" in my WebsphereLoginModule.java was executed.</b><br />
<br />
So, my problem is how to make Websphere to call my WebsphereLoginModule instand of the default one when I try to call my EJB.

Paul Ilechko

unread,
Feb 23, 2008, 8:40:17 AM2/23/08
to
kar...@msn.com wrote:


> So, my problem is how to make Websphere to call my
> WebsphereLoginModule instand of the default one when I try to call my
> EJB.


Well, the code you listed was completely unreadable because the web site
screws everything up for NNTP users. But you have not explained why you
need a custom login module. What are you trying to do that WAS won't do
by default? What is your user registry?

Assuming that you even need one, why try to use an application config
rather than add your module to RMI_INBOUND ?

I suggest that you begin by reading this paper:

http://www.ibm.com/developerworks/websphere/techjournal/0508_benantar/0508_benantar.html

kar...@msn.com

unread,
Feb 23, 2008, 11:50:24 AM2/23/08
to
<div class="jive-quote">But you have not explained why you need a custom login module. What are you trying to do that WAS won't do by default? What is your user registry?</div>
<br />
Because I need to implement a bunch of business logic in my login module. I use Oracle to store user information.<br />
<br />
<div class="jive-quote">why try to use an application config rather than add your module to RMI_INBOUND ?</div>
<br />
My login module only be useful to my enterprise application, and I don't want it to effect other applications.

kar...@msn.com

unread,
Feb 24, 2008, 9:05:39 AM2/24/08
to
There is something like "Security domain" in JBoss can achieve my purpose.<hr />
&lt;jboss&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;security-domain&gt;java:/jaas/JawJaasDbRealm&lt;/security-domain&gt;<br />
&nbsp;&nbsp;&nbsp;...<br />
&lt;/jboss&gt;<br />
<hr />
<br />
I don't know how to make it in Websphere.
0 new messages