Interceptadores portáteis são códigos de programa que atuam ao nível das mensagens entre o sistema cliente e o servante, ou ao nível das requisições, entre o ORB e o servante. Neste projeto, serão implementados interceptadores de mensagens, visando autenticar através do JAAS - Java Authentication and Authorization Service - o acesso do cliente ao servante. Note-se que qualquer cliente e qualquer servante podem ser utilizados com os interceptadores, pois são códigos independentes das implementações destes outros. Na seção Fazendo funcionar veremos como isso acontece.
A padronização dos interceptadores é relativamente recentes, surgindo com força no CORBA 2.2. Por ser um mecanismo muito flexível, é possível implementar criptografia, monitoramento de mensagens entre outras tarefas, sem interferir no código proprietário de clientes e servantes.
O Java Authentication and Authorization Service era um pacote opcional para o Java 2 SDK - S tandard Edition, agora é parte integrante da versão 1.4 do Java Development Kit. Ele funciona de modo plugável, podendo ser implementado de forma indenpendente do resto do código, com uma filosofia muito parecida com a dos próprios interceptadores: no run-time é que a classe que implementa a segurança é utlizada.
O projeto está sendo desenvolvido em ambiente Windows 98, com máquinas Pentium III com, pelo menos, 128 Mb de memória RAM, porém, é possível levá-lo para qualquer ambiente UNIX-like, como o Linux ou Solaris, bastando ter o JDK 1.4 instalado na plataforma escolhida.
O sistema em implementação será muito parecido com o esquema abaixo:
Os interceptadores de mensagens (pontos 1 e 2) são executados tanto no lado cliente quanto no lado do servante. Qualquer cliente pode-se utilizar dos interceptadores, assim como qualquer servante, sem acréscimo algum de código para suas implementações originais. Neste projeto não será utilizado o interceptador de requisições (ponto 3).
Na troca de mensagens, o interceptador do cliente envia para o interceptador do servante uma autenticação com usuário e senha, além da chamada para o servante. Se ela for autenticada pelo sistema de autenticação implementado no interceptador, então a chamada continua para o servante, que retornará a resposta requisitada. Caso contrário, o interceptador retorna uma mensagem de erro, indicando que aquele cliente não tem autorização para acessar ao servante em questão, sendo recebida pelo interceptador do lado do cliente, que vai mostrar o erro e sua causa. Note-se que o cliente e o servante, em momento algum, tomam conhecimento desta interação, sendo exclusiva da responsabilidade dos interceptadores de mensagens.
http://java.sun.com/j2se/1.4/docs/api/javax/security/auth/package-frame.html
http://java.sun.com/j2se/1.4/docs/api/org/omg/PortableInterceptor/package-summary.html
ORBD orbd -ORBInitialPort 1050 Servante c:\> java HelloServer -ORBInitialPort 1050 Cliente c:\> java HelloWorld -ORBInitialPort 1050
produzindo o clássico
Hello, World!na máquina cliente. Note que é preciso indicar qual porta o Server Manager ORBD vai estar escutando. Para rodar com os interceptadores:
Servante
c:\> java HelloServer -ORBInitialPort 1050
-Dorg.omg.PortableInterceptor.InitializerClass.interceptor.ServerInitializer
Cliente
c:\> java HelloWorld -ORBInitialPort 1050
-Dorg.omg.PortableInterceptor.InitializerClass.interceptor.ClientInitializer
Com a implementação da autenticação, inclusive com o Security Manager, o comando será (para o servante apenas):
c:\> java HelloServer -ORBInitialPort 1050
-Dorg.omg.PortableInterceptor.InitializerClass.interceptor.ServerInitializer
-Djava.security.manager
-Djava.security.policy==arquivo.policy /* arquivo com a política de segurança */
-Djava.security.auth.login.config==arquivo.config /* arquivo de configuração do login */
http://java.sun.com/j2se/1.4/docs/guide/security/jaas/tutorials/GeneralAcnOnly.html
Java Programming with CORBA, ed. OMG Press
Gerald Brose, Andreas Vogel & Keith Duddy