📄 ch13s78.html
字号:
public String echo(String arg)
{
System.out.println("StatefulSessionBean.echo, arg="+arg);
Principal p = sessionContext.getCallerPrincipal();
System.out.println("StatefulSessionBean.echo, callerPrincipal="+p);
return arg;
}
public void noop()
{
System.out.println("StatefulSessionBean.noop");
Principal p = sessionContext.getCallerPrincipal();
System.out.println("StatefulSessionBean.noop, callerPrincipal="+p);
}
}</pre></div><div class="figure"><p><a name="ejb-jar.xml"></a><b>Figure 13.16. The ejb-jar Deployment Descriptor</b></p><pre class="programlisting">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN"
"http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">
<ejb-jar>
<display-name>SecurityTests</display-name>
<enterprise-beans>
<session>
<description>A trival stateless session echo bean</description>
<ejb-name>StatelessSession</ejb-name>
<home>SessionHome</home>
<remote>Session</remote>
<ejb-class>StatelessSessionBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
<session>
<description>A trival stateful session echo bean</description>
<ejb-name>StatefulSession</ejb-name>
<home>SessionHome</home>
<remote>Session</remote>
<ejb-class>StatefulSessionBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<security-role>
<role-name>Echo</role-name>
</security-role>
<method-permission>
<role-name>Echo</role-name>
<method>
<ejb-name>StatelessSession</ejb-name>
<method-name>*</method-name>
</method>
<method>
<ejb-name>StatefulSession</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
<method-permission>
<role-name>Coder</role-name>
<method>
<ejb-name>StatefulSession</ejb-name>
<method-name>create</method-name>
</method>
<method>
<ejb-name>StatefulSession</ejb-name>
<method-name>remove</method-name>
</method>
<method>
<ejb-name>StatefulSession</ejb-name>
<method-name>noop</method-name>
</method>
</method-permission>
</assembly-descriptor>
</ejb-jar>
</pre></div><div class="figure"><p><a name="jboss.xml"></a><b>Figure 13.17. The jboss.xml Deployment Descriptor</b></p><pre class="programlisting">
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<!-- All bean containers use this security manager by default -->
<security-domain>java:/jaas/example1</security-domain>
<enterprise-beans>
<session>
<ejb-name>StatelessSession</ejb-name>
<jndi-name>example1/StatelessSession</jndi-name>
</session>
<session>
<ejb-name>StatefulSession</ejb-name>
<jndi-name>example1/StatefulSession</jndi-name>
</session>
</enterprise-beans>
</jboss>
</pre></div><div class="figure"><p><a name="SessionClient.java"></a><b>Figure 13.18. The Client</b></p><pre class="programlisting">
import java.io.IOException;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import javax.security.auth.callback.*;
import javax.security.auth.login.*;
/** A simple session client that access the two secured EJBs as the user
passed in on the command line.
@author Scott_Stark@displayscape.com
@version $Revision: 3.0 $
*/
public class SessionClient
{
static class AppCallbackHandler implements CallbackHandler
{
private String username;
private char[] password;
public AppCallbackHandler(String username, char[] password)
{
this.username = username;
this.password = password;
}
public void handle(Callback[] callbacks) throws
java.io.IOException, UnsupportedCallbackException
{
for (int i = 0; i < callbacks.length; i++)
{
if (callbacks[i] instanceof NameCallback)
{
NameCallback nc = (NameCallback)callbacks[i];
nc.setName(username);
}
else if (callbacks[i] instanceof PasswordCallback)
{
PasswordCallback pc = (PasswordCallback)callbacks[i];
pc.setPassword(password);
}
else
{
throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback");
}
}
}
}
public static void main(String args[]) throws Exception
{
if( args.length != 3 )
throw new IllegalArgumentException("Usage: username password example");
String name = args[0];
char[] password = args[1].toCharArray();
String example = args[2];
System.out.println("+++ Running SessionClient with username="+name+", password="+args[1]+", example="+example);
try
{
AppCallbackHandler handler = new AppCallbackHandler(name, password);
LoginContext lc = new LoginContext("TestClient", handler);
System.out.println("Created LoginContext");
lc.login();
}
catch (LoginException le)
{
System.out.println("Login failed");
le.printStackTrace();
}
try
{
InitialContext iniContext = new InitialContext();
SessionHome home = (SessionHome) iniContext.lookup(example+"/StatelessSession");
System.out.println("Found StatelessSessionHome");
Session bean = home.create();
System.out.println("Created StatelessSession");
System.out.println("Bean.echo('Hello') -> "+bean.echo("Hello"));
bean.remove();
}
catch(Exception e)
{
e.printStackTrace();
}
try
{
InitialContext iniContext = new InitialContext();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -