• Nenhum resultado encontrado

Anexo A : Código Fonte da Implementação da Base de

Segurança

Pacote : secruritylmpl

Classe : BasicSecuritylmpl.java

Objetivo : Implementar a interface da base de segurança Implementaçao :

Declarar duas tabelas Hash uma contendo os dados do usuário e a outra para a lista de controle de acesso.

Ler um arquivo texto contendo as informações de segurança e preencher as duas tabelas Hash com as informações lidas. authenticate():procurar o password do userID na tabela Hash de usuários

se encontrar então criar o Ticket e retornar o Ticket para o cliente.

criar o Ticket criptografando o userID

e r e t o m a r userID na forma de uma sequência bytes cifrados. decriptografa o Ticket transformando o byte em string

usar tabela Hash de controle de acesso para obter os objetos que UserID pode ter acesso. Se o nome do objeto invocado pelo userID estiver dentro da lista desses objetos a invocação é autorizada. ***************************************************************************** */ package securitylmpl; import j a v a .u t i l .*; import j a v a .i o .*; import o r g .o m g .CORBA.*; import segurança.*;

public class BasicSecuritylmpl extends _sk_BasicSecurity {

private Hashtable userTable;

private Hashtable accessControlList; private String star;

BasicSecuritylmpl ( String nane, String fileName ) { s u p e r ( name );

// criar a tabela hash de usuários userTable = new Hashtable( 50 ) ;

// criar a tabela hash da lista de controle de acesso accessControlList = new Hashtable ( 100 ) ;

star = new St r i n g ("*"); try {

RandomAccessFile file;

String line;

String user, passwd, acDesc;

int userlndex, passwdlndex, acDescIndex;

file = new RandomAccessFile ( fileName, "r" );

encrypt()

decr y p t () authorize()

Anexos

w h i l e ( ( line = fil e .readLine() ) != null ) { userlndex = line.indexOf(' : ' , 0);

i f ( userlndex > -1 ) {

user = line.substring( 0, userlndex );

passwdlndex = line.i n d e x O f , userlndex+l); i f ( passwdlndex > -1 ) {

passwd = line.substring( userlndex+l, passwdlndex ); userTable.p u t ( user, passwd );

acDesc = line.substring( passwdlndex+l ); i f ( acDesc !=null ) {

accessControlList.p u t ( u s e r , acDesc );

>

else {

System.err.printin( "usuário" + user + " não tem acesso" );

} }

else {

System.err.println( "usuário " + user +

" não tem senha - erro no formato do arquivo?" );

> >

else {

System.err.printin( "linha " +• line +

" não tem usuário - erro no formato do arquivo?" );

} } >

catch ( IOException ioex ) {

System.err.println( "arquivo " + filename + " não encontrado" ); System.e x i t ( 1 );

} }

// metodo para criptografar o userID

public byte[] encrypt( String userid ) { return userid.getBytes() ;

}

// metodo para decriptografar o ticket

public String decrypt( byte[] ticket ) { return new String( ticket ) ;

}

// metodo para autenticar userID en Ticket

public byte[] authenticate( String userid, String password ) throws NatAuthenticated {

i f ( userTable.containsKey( userid ) &&

userTable.g e t ( userid ).equals( password ) ) { // create a simple ticket

return encrypt( userid );

}

else {

Anexos

> }

/ / método para autorizar o userlD a invocar a operacao

public void authorize( byte[] ticket, org.omg.CORBA.Object object, String operationName )

throws NotAuthorized {

String userid = decrypt( ticket ) ;

System.err.printin( "Tentou uma Autorizacao: " + userid ); String objectld = object._object_name() ;

i f ( objectld — null ) {

System.err.printin( "Tentou a tima Autorizacao: non-name object" ) ; r eturn;

>

if ( accessControlList.containsKey( userid )) { String allowedObjects =

(String) accessControlList.get( userid ) ;

i f ( allowedObjects.regionMatches( 0, "*", 0, 1 ) ) { return;

}

i f ( allowedObjects.

regionMatches( 0, objectld, 0, objectld.length() ) ) { return;

} }

throw new NotAuthorized () ;

> >

Anexos

Anexo B : Código Fonte da Implementação do Servidor

Pacote : securitylmpl Classe : server.java

Objetivo : Inicializar a OKB e Criar o objeto da Base de Segurança BasicSecuritylmpl e aguardar

solicitações

*/

package securityImpl; import o r g .o m g .CORBA. * ; public class Server {

public static void main(String[] args) { i f ( a r g s .length != 2 ) {

System.o u t .println(

"Eh necessário digitar dois argumentos " + "<name>, <Arquivo da lista de controle"); System.e x i t ( 1 );

try {

//init ORB

ORB orb = ORB.init( args, null ); BOA boa = o r b .BOA_init();

// cria o objeto BasicSecurity que o objeto da base // de segurança

BasicSecuritylmpl basicSecuritylmpl =

new BasicSecuritylmpl( args[0], args[l] ); // Exporta a referencia do objeto

b o a .obj_is_ready( basicSecuritylmpl );

// inprime a referencia na forma de um string

//System.out.println( orb.object_to_string( basicSecuritylmpl ) ); // aguarda requisições b o a . impl_is_ready () ; } catch(SystemException e) { System.err.println(e); } } // Fim * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Anexos

Anexo C : Código Fonte da Implementação do Interceptador

no Lado do Servidor

/*

*

Pacote: securityInterceptor

Cl a s s e : SecurityServerInterceptor.j ava

Objetivo: Interceptar o IIOP reguest e extrair os dados contidos nele Implementação:

Obter a referencia do objecto base de segurança através do método b i n d ()

com o método receive_request obter a partir do IIOP request os dados necessários para o serviço de autorização. (principal, operação invocada, referência do objeto destino)

0 principal e o nome dá operação invocada são obtidos a partir do requestHeader e a referência do objeto destino a partir do

holderObjet

+** + */

package securityInterceptor;

import c o m .visigenic.vbro k e r .interceptor.*; import c o m .visigenic.vbroker.IO P .*; import c o m .visigenic.vbroker.GIO P .*; import o r g .o m g .C O R B A .*; import o r g .o m g .CORBA..portable.*; import security.*; //import j a v a .u t i l .* ; //import java.io.*;

public class SecurityServerlnterceptor implements Serverlnterceptor { private BasicSecurity basicSecurity;

private String literal;

public SecurityServerlnterceptor() { // inicializar a ORB

ORB orb = O R B . i n i t O ; try {

// obter a referncia do objeto base de segurança basicSecurity = BasicSecurityHelper.bind( orb );

>

catch(Exception e) { System.e r r .println(

" r e f e r e n d a da base de segurança nao obtida") ; System.e r r .prin t l n (

"Abortando a execucao ... "); System.exit(-l);

} >

// métodos invocados para localizar um objeto public IOR locate(int req_id,

b y t e [] obj ect_key, Closure closure) { return n u l l ;

Anexos

public void locate_succeeded(int req_id, Closure closure) {}

public void locate_forwarded(int req_id, IORHolder forward_ior,

Closure closure) {}

public IOR locate_failed(int req_id, byte[] object_key,

Closure closure) { return null;

}

// obter a patir do IX0P request o principal, objeto de destino e a operacao // invocada

public InputStream receive_request(RequestHeader hdr, org.omg.CORBA.ObjectHolder target, InputStream buf, Closure closure)

{ try { basicSecurity.authorize( h d r .requesting_principal, target.v a l u e , h d r .operation ); return null; } catch ( NotAuthorized na ) {

/* ***Pode-se criar um arquivo log dos dados do principais nao autorizados tentando acessar o objeto servidor ★★★**+*★★★★**

*/

//literal = String( h d r .requesting_principal ); System.err.println(" Nao autorizado");

throw new NO_PERMISSION() ;

} } /* #

Métodos invocados durante um IIOP response prepare_reply : disparado quando uma resposta é preparada send_reply : disparada quando uma resposta é enviada send_reply_failed : disparada quando a resposta é enviada

sem sucesso

send_reply_request: disparada quando a resposta é enviada com sucesso

*/

public void prepare_reply(RequestHeader hdr, ReplyHeaderHolder reply, org.omg.CORBA.Object target, Closure closure)

{ }

Anexos

ReplyHeader h d r ,

or g .o m g .C O R B A .Obj ect target, OutputStream b u f , org.omg.CORBA.Environment env, Closure closure) { return null; }

public void send_reply_failed(RequestHeader reqHdr, ReplyHeader replyHdr,

o r g .o m g .C O R B A .Obj ect target, o r g .o m g .C O R B A .Environment env, Closure closure) {}

public void request_completed(RequestHeader reqHdr, or g .o m g .C O R B A .Object

target, Closure closure) {) // invocado quando a conexão e terminada public void shutdown(

c o m .visigenic.vbroker.interceptor.ServerInterceptorPackage.ShutdownReason reason) {}

// invocado quando ocorre uma falha na conexão

public void exception_occurred(RequestHeader reqHdr, org.omg.CORBA.Environment env,

Closure closure) (}

Anexos

Anexo D : Códigos fonte da Implementação que cria a Fábrica de

Interceptadores

/**************************************•************************************

Pacote: securitylnterceptor

Nome : SecurityServerlnterceptorFactory. java

Objetivo: criar uma instancia do Serverlnterceptor quando ela nao existe

package securitylnterceptor;

import c o m .visigenic.vbroker.interceptor.* ; public class SecurityServerlnterceptorFactory

implements ServerlnterceptorFactory {

private SecurityServerInterceptor _server = null; // cria nma nova intancia do Securitylnterceptor public Serverlnterceptor create(

c o m . visigenic.vbroker.IO P .TaggedProfile profile) { if (_server = null)

{

_server = new SecurityServerInterceptor() ;

}

return _server;

} >

Documentos relacionados