Download - Lecture 12

Transcript
Page 1: Lecture 12

1

Lecture 12

George Koutsogiannakis/ Summer 2011

CS441

CURRENT TOPICS IN PROGRAMMING LANGUAGES

Page 2: Lecture 12

Topics

• Servlets used as RMI Client.– RMI Security needed for Servlet to RMI server

Communications.

2

Page 3: Lecture 12

Servlet as RMI client

• The Servlet will implement the doGet or doPost method as normally.

• Within the method (doGet or doPost):– You need to catch Exceprion (create try/catch)– Do a lookup on the registry:

ReverseInterface r= (ReverseInterface) Naming.lookup ("//localhost:1099/Reverse");

3

Page 4: Lecture 12

Servlet as RMI client

– Where we assume that:• The server has registered a remote object for its instance

called “Reverse”.• The server’s Remote Interface that defines its service is

ReverseInterface.• The registry is at port 1099.

– Then go ahead and do the remote invocation and capture the output (still within try block):

String str=r.reverseString(qr);

4

Page 5: Lecture 12

Servlet as RMI client

– Where r is the reference received from the registry

– The argument in the remote method is the data type that the method accepts (i.e qr is of String data type in the example).

– The returned value from the server is captured by variable str (assuming that the remote method returns a String data type in this example).

5

Page 6: Lecture 12

Servlet as RMI client

– Process the captured data by the servlet using the proper stream and the response object:

PrintWriter out=response.getWriter();

out.println(str);

out.close();

6

Page 7: Lecture 12

RMI server.

• Create RMI server as it is done normally.import java.rmi.Remote;

import java.rmi.RemoteException;

public interface ReverseInterface extends Remote

{

String reverseString(String originalstring) throws RemoteException;

}

IN THE SERVER ReserveInterfaceImpl:

public static void main(String[] args){

String name="//localhost/Reverse";

try

{ ReverseInterfaceImpl r= new ReverseInterfaceImpl();

Naming.rebind(name, r); etc……………

7

Page 8: Lecture 12

RMI server.

IMPLEMENT THE REMOTE METHOD (SERVICE)public String reverseString(String originalstring) throws

RemoteException

{

int length=originalstring.length();

StringBuffer temp=new StringBuffer(length);

for (int i=length; i>0; i-- )

{

temp.append(originalstring.substring(i-1,i));

}

return temp.toString();

}

8

Page 9: Lecture 12

SET UP OF THE APPLICATION

• Create the applications web site outside of Tomcat (NEVER DEVELOP THE APPLICATION INSIDE TOMCAT).

• Do NOT Include the required files for the RMI server in the application’s deployment. Place all RMI client related files in the same directory as the servlet.

• Deploy using a WAR file approach.– Remember that with the servlet you will need the stub from the

server and a copy of the interface file also.

9

Page 10: Lecture 12

SET UP OF THE APPLICATION

• You will need the certificate applied like you did in the assignment 1 with respect to a signed applet – We assume that the servlet uses an applet as a

client!!

• You may need a policy file like (optional): grant {

permission java.security.AllPermission;

};

10

Page 11: Lecture 12

SET UP OF THE APPLICATION

• To allow communications between the Web Server (the servlet acting as RMI client) and the RMI Server:– Modify the java.policy file in the System’s security directory (jdk

installation) as follows:

// allows anyone to listen on un-privileged ports

permission java.net.SocketPermission "localhost:1024-65535", "connect, accept, listen, resolve";

11

Page 12: Lecture 12

Servlet as RMI Over IIOP Client.

• In either the doGet or doPost method:– We will need a Hashtable structure to place the call to

registry as a name/value attributes

ReverseInterface r;

Hashtable env=new Hashtable();

env.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory");

env.put("java.naming.provider.url", "iiop://localhost:900");

We assume that the IIOP Naming Service is listening at port 900.

12

Page 13: Lecture 12

Servlet as RMI Over IIOP Client

– In try block contact the Naming Service (IIOP registry):

Context initialNamingContext=new InitialContext(env);

out.println("obtained InitialContext");

r=(ReverseInterface)PortableRemoteObject.narrow(initialNamingContext.lookup("Reverse"), ReverseInterface.class);

– Now do the remote invocation using the reference r received from the Naming Service

String str=r. reverseString(qr);WHERE reverseString is the remote method defined in the

Interface created by the Server.

13

Page 14: Lecture 12

Servlet as RMI Over IIOP Client

– Process the data captured by using the proper stream with the response object.

14

Page 15: Lecture 12

RMI Over IIOP Server

• Need additional import statements:import java.rmi.*;

import java.rmi.server.*;

//add the lines below

import javax.rmi.PortableRemoteObject;

import javax.naming.*;

import java.net.*;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

15

Page 16: Lecture 12

RMI Over IIOP Server

– public class ReverseInterfaceImpl extends PortableRemoteObject implements ReverseInterface

– Registration in try block in main method:ReverseInterfaceImpl r= new ReverseInterfaceImpl();

//add the follwoing lines

Context initialNamingContext=new InitialContext();

System.out.println("Binding server to registry..");

initialNamingContext.rebind("Reverse", r);

System.out.println("Object was registered");

– Implement the remote method.

16

Page 17: Lecture 12

SET UP OF THE APPLICATION

• Set up is similar to RMI description in previous files.

• Compiling should be as described in the RMI over IIOP presentation (lecture 11).

17

Page 18: Lecture 12

RMI SECURITY

• RMI has its own Security Manager.– Automatic downloading of stub files and

interface file by the client is strictly cntrolled by security.

• Secured Class Loaded

• java.policy file

• java.security file

• Security Policy controlled by RMISecurityManager object

18

Page 19: Lecture 12

RMI SECURITY

• RMISecurityManager creates a sandbox similar to what the applets have to encounter.

• Default RMISecurityManager uses the default java.policy and java.security system files.

• We can create our own RMISecurityManager and remove some of the restrictions.

• We can also change for demonstration reasons some of the restrictions by modifying the java.policy and java.security files and let the default RMISecurityManager object operate.

19

Page 20: Lecture 12

Study Guide

• See examples posted on the course’ s web site – ServletRMI.zip and – ServletRMIoverIIOP.zip

20