Olá amigos, sou iniciante nessa composição de tecnologias listadas no assunto deste poste e até então, funcionou bem, porém, ao tentar integrar o JAAS Security na minha aplicação estou tendo a seguinte dificuldade:
Tentei injetar o ClienteServices numa extensão de uma classe do Jaas Security para tentar recuperar as regras de permissões dos clientes, pois, meu LDAP só armazena login e senha mas não está funcionando. Ficaria grato se você pudesse me dar uma “luz” sobre o que eu estou fazendo de errado. Segue o código da classe na qual estou tendo dificuldade:
package br.embrapa.cnpmf.emaps.cliente.services;
import java.io.Serializable;
import java.security.acl.Group;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.security.auth.login.LoginException;
import org.jboss.security.auth.spi.LdapLoginModule;
@Named
@SessionScoped
public class CustomLDAPLoginModule extends LdapLoginModule implements Serializable {
private static final long serialVersionUID = 2644327253799952198L;
@Inject
private ClienteServices clienteServices;
@Override
protected Group[] getRoleSets() throws LoginException {
if (clienteServices != null)
System.out.println(">>> não nulo");
else
System.out.println(">>> nulo");
return super.getRoleSets();
}
@Override
protected String getUsersPassword() throws LoginException {
System.out.println(">>> getUsersPassword: " + super.getUsersPassword());
return super.getUsersPassword();
}
@Override
protected boolean validatePassword(String inputPassword,
String expectedPassword) {
boolean result = super.validatePassword(inputPassword, expectedPassword);
return result;
}
}
Nesse exemplo, a classe ClienteServices retorna null, sendo que no segundo exemplo abaixo, a mesma injeção funciona perfeitamente:
package br.embrapa.cnpmf.emaps.cliente.web.mb;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import javax.annotation.PostConstruct;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.context.FacesContext;
import javax.faces.context.Flash;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.commons.lang.StringUtils;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
import br.embrapa.cnpmf.emaps.cliente.entity.Cliente;
import br.embrapa.cnpmf.emaps.cliente.entity.ClienteTelefone;
import br.embrapa.cnpmf.emaps.cliente.entity.filter.ClienteFilter;
import br.embrapa.cnpmf.emaps.cliente.exception.ClienteExistenteException;
import br.embrapa.cnpmf.emaps.cliente.exception.NenhumTelefoneInformadoException;
import br.embrapa.cnpmf.emaps.cliente.services.ClienteServices;
import br.embrapa.cnpmf.emaps.common.entity.DadosPaginacao;
import br.embrapa.cnpmf.emaps.common.entity.DadosPaginacao.ModoOrdenacao;
import br.embrapa.cnpmf.emaps.common.web.UtilsMB;
@Named
@ConversationScoped
public class ClienteMB implements Serializable {
private static final long serialVersionUID = 6920835789315490285L;
// bundle com as mensagens internacionalizaveis
private ResourceBundle bundle;
@Inject
private Conversation conversation;
@Inject
private ClienteServices clienteServices;
@Inject
private FacesContext facesContext;
@Inject
private UtilsMB utilsMB;
private Cliente cliente = new Cliente();
private Long idCliente;
private LazyDataModel<Cliente> clientes;
private String nomeBuscar;
private ClienteTelefone telefoneAdd = new ClienteTelefone();
private List<ClienteTelefone> telefones;
/**
* Devolve a lista de clientes a ser mostrada no dataTable de acordo com os
* filtros da paginacao
*
* @return
*/
public LazyDataModel<Cliente> getClientes() {
if (clientes == null) {
clientes = new LazyDataModel<Cliente>() {
private static final long serialVersionUID = -2761376581835510122L;
@Override
public List<Cliente> load(int first, int pageSize,
String sortField, SortOrder sortOrder,
Map<String, String> filters) {
// obtem a quantidade total de registros
setRowCount(clienteServices
.countByFilter(new ClienteFilter(nomeBuscar, null)));
// recupera os registros de acordo com os dados de busca e
// de paginacao
return clienteServices
.findByFilter(new ClienteFilter(
nomeBuscar,
new DadosPaginacao(
first,
pageSize,
sortField,
SortOrder.ASCENDING
.equals(sortOrder) ? ModoOrdenacao.ASCENDING
: ModoOrdenacao.DESCENDING)));
}
};
}
return clientes;
}
...
Desde já obrigado pela paciência.