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.