Back-End

12 jul, 2010

Criando um Realm Personalizado no Tomcat

Publicidade

Esse artigo tem como objetivo mostrar como criar uma maneira
de autenticação personalizada utilizando o ralm.

Caso você queira saber mais sobre o realm e como ele
funciona veja o artigo (https://imasters.com.br/artigo/17312/javaweb/seguranca_jee_com_realmtomcat/)
escrito por Camilo Lopes.

 

Configurando o tomcat para utilizar o nosso realm
personalizado.

Primeiramente crie uma tag do real para seu modelo de
autenticação.

<Realm className="org.apache.catalina.realm.ws.
RealmAuthenticate"  urlService="http://localhost:9999/wsAuthenticator/ServiceAuthenticateRealm?wsdl"
/>

 

Na tag do real nos definimos o atributo “className” que
especifica a nossa classe de autenticação. Nesse atributo nós passamos o
endereço completo para a classe.

O segundo atributo “urlService” é um atributo personalizado
para o nosso modelo de autenticação.

 

Criando de autenticação
do Realm

 

Após configurar o tomcat com a tag do realm nós devemos
criar a classe na qual passamos como argumento no “className”.

package org.apache.catalina.realm.ws;

import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
import org.apache.catalina.realm.GenericPrincipal;
import org.apache.catalina.realm.RealmBase;

public class WSRealmAuthenticate extends RealmBase implements Principal {

/**
* Url do Web Service
*/
private String urlService;

/**
* Armazena o nome do usuário
*/
private String username;

/**
* Armazena a credencial do usuário
*/
private String credentials;

/**
* autentica usuário
* username: recebe o nome do usuário
* credentials: recebe a senha do usuário
* @param username
* @param credentials
* @return
*/
@Override
public Principal authenticate(final String username, String credentials) {
this.username = username;
this.credentials = credentials;
return this;
}

/**
* verifica se o usuário pertence a role
* principal: recebe um objeto principal
* role: recebe o nome da role
* @param principal
* @param role
* @return
*/
@Override
public boolean hasRole(Principal principal, String role) {
// implementar aqui
return true;
}

/**
* retorna o nome do usuário
* @return
*/
@Override
public String getName() {
return username;
}

/**
* Retorna a senha associada ao usuário
* user: recebe o usuário
* @param user
* @return
*/
@Override
protected String getPassword(final String user) {
return credentials;
}

/**
* Retorna a principal associada ao usuário
* @param principal
* @return
*/
@Override
protected Principal getPrincipal(String principal) {
List roles = new ArrayList();
roles.add("admin");
GenericPrincipal genericPrincipal = new GenericPrincipal(this, username, credentials, roles);
return genericPrincipal;
}

/**
* Parametro da url do web service
* @param urlService
*/
public void setUrlService(String urlService) {
this.urlService = urlService;
}

}

Você pode ver que o método hasRole(), esse método que vai
ser o responsável por implementar a regra que vai autenticar o usuário.

Repare que para o atributeo “urlService” nós criamos uma
método “set” para o tomcat possa atribuir o valor do nosso atributo na nossa
classe.

No método getPrincipal() que é um método abstrato da classe
RealmBase nós criamos um objeto principal genérico com os dados de login, senha
e regras do usuário, e passamos nosso objeto de autenticação na criação do GenericPrincipal.

Após ter construído a classe crie um jar e coloque o mesmo
na pasta lib do tomcat.

Agora pronto só configurar suas aplicações que iram utilizar
o modelo de autenticação do tomcat.