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.<br />RealmAuthenticate" urlService="http://localhost:9999/wsAuthenticator/ServiceAuthenticateRealm?wsdl"<br />/>
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;<br /><br />import java.security.Principal;<br />import java.util.ArrayList;<br />import java.util.List;<br />import org.apache.catalina.realm.GenericPrincipal;<br />import org.apache.catalina.realm.RealmBase;<br /><br />public class WSRealmAuthenticate extends RealmBase implements Principal {<br /><br /> /**<br /> * Url do Web Service<br /> */<br /> private String urlService;<br /><br /> /**<br /> * Armazena o nome do usuário<br /> */<br /> private String username;<br /><br /> /**<br /> * Armazena a credencial do usuário<br /> */<br /> private String credentials;<br /><br /> /**<br /> * autentica usuário<br /> * username: recebe o nome do usuário<br /> * credentials: recebe a senha do usuário<br /> * @param username<br /> * @param credentials<br /> * @return<br /> */<br /> @Override<br /> public Principal authenticate(final String username, String credentials) {<br /> this.username = username;<br /> this.credentials = credentials; <br /> return this;<br /> }<br /><br /> /**<br /> * verifica se o usuário pertence a role<br /> * principal: recebe um objeto principal<br /> * role: recebe o nome da role<br /> * @param principal<br /> * @param role<br /> * @return<br /> */<br /> @Override<br /> public boolean hasRole(Principal principal, String role) {<br /> // implementar aqui<br /> return true;<br /> }<br /><br /> /**<br /> * retorna o nome do usuário<br /> * @return<br /> */<br /> @Override<br /> public String getName() {<br /> return username;<br /> }<br /><br /> /**<br /> * Retorna a senha associada ao usuário<br /> * user: recebe o usuário<br /> * @param user<br /> * @return<br /> */<br /> @Override<br /> protected String getPassword(final String user) {<br /> return credentials;<br /> }<br /><br /> /**<br /> * Retorna a principal associada ao usuário<br /> * @param principal<br /> * @return<br /> */<br /> @Override<br /> protected Principal getPrincipal(String principal) {<br /> List roles = new ArrayList();<br /> roles.add("admin");<br /> GenericPrincipal genericPrincipal = new GenericPrincipal(this, username, credentials, roles);<br /> return genericPrincipal;<br /> }<br /><br /> /**<br /> * Parametro da url do web service<br /> * @param urlService<br /> */<br /> public void setUrlService(String urlService) {<br /> this.urlService = urlService;<br /> }<br /><br />}<br />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.







