Boa tarde pessoal,
Tenho uma aplicação web com uma tela de login que, além do usuário e senha, o usuário também deverá informar que banco de dados quer acessar. Até agora não tive sucesso em implementar essa solução. Segue abaixo os meus arquivos de configurações:
Conexao.java
package br.com.empresa.config;
import br.com.empresa.web.util.ControleMB;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.stereotype.Component;
@Component("dataSource")
public class Conexao extends DriverManagerDataSource {
static {
try {
System.getProperties().load(Conexao.class.getResourceAsStream("/config.properties"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
public Conexao() {
this.setDriverClassName(System.getProperty("DriverClassName"));
this.setUrl(System.getProperty(ControleMB.AMBIENTE + ".Url"));
this.setUsername(System.getProperty(ControleMB.AMBIENTE + ".Username"));
this.setPassword(System.getProperty(ControleMB.AMBIENTE + ".Password"));
}
}
config.properties
DriverClassName=oracle.jdbc.driver.OracleDriver
prod.Url=jdbc:oracle:thin:@localhost:1521:banco1
prod.Username=
prod.Password=
prod.temp=
homolog.Url=jdbc:oracle:thin:@localhost:1521:banco2
homolog.Username=
homolog.Password=
homolog.temp=c:/
homologDMZ.Url=jdbc:oracle:thin:@localhost:1521:banco3
homologDMZ.Username=
homologDMZ.Password=
homologDMZ.temp=c:/
login.jsf
<h:form>
<p:dialog header="Área restrita"
modal="true"
closable="false"
position="center"
widgetVar="modalLogin"
minWidth="300"
width="300"
showEffect="slide"
draggable="false"
resizable="false"
visible="true" >
<p:messages id="mensagens" showDetail="true" showSummary="false" />
<h:panelGrid columns="2">
<h:outputLabel value="Login" />
<h:inputText value="#{controleMB.login}" required="true" requiredMessage="Informe o seu login." size="24"/>
<h:outputLabel value="Senha" />
<h:inputSecret value="#{controleMB.senha}" required="true" requiredMessage="Informe a sua senha." size="24"/>
<h:outputLabel value="Banco" />
<h:inputText value="#{controleMB.bancoDados}" required="true" requiredMessage="Informe a sua senha." size="24"/>
</h:panelGrid>
<br></br>
<center>
<h:commandButton value="Login" action="#{controleMB.logar}"/>
</center>
</p:dialog>
</h:form>
ControleMB.java
package br.com.empresa.web.util;
import br.com.empresa.enumeration.Ambiente;
import br.com.empresa.modelo.Usuario;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
@Controller
@ManagedBean
@Scope("view")
public class ControleMB implements java.io.Serializable {
private static final long serialVersionUID = -8527390698587628781L;
private String login;
private String senha;
public static final String AMBIENTE = Ambiente.Homologacao.getDescricao();
private SessionInfo sessionInfo;
private String bancoDados;
private StringBuilder erro = new StringBuilder();
public ControleMB() {
}
public String logar() {
String retorno = "";
FacesContext contexto = FacesContext.getCurrentInstance();
if (login != null && senha != null ) {
if (validaUsuario(getLogin(), getSenha())) {
HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
sessao.setAttribute("login", login);
sessao.setAttribute("senha", Util.SHA1(senha));
retorno = "sucesso";
Usuario usuario = new Usuario();
usuario.setUsuario(login.toUpperCase());
sessao.setAttribute("usuario", usuario);
sessionInfo.setUsuarioLogado(usuario);
} else {
//Util.addMessageError("Usuário ou senha inválido!");
Util.addMessageError(this.erro.toString());
retorno = "sair";
}
} else {
Util.addMessageInfo("Preencher todos os campos!");
}
return retorno;
}
private boolean validaUsuario(String usuario, String senha) {
Connection con = null;
try {
Class.forName(System.getProperty("DriverClassName"));
con = DriverManager.getConnection(System.getProperty(ControleMB.AMBIENTE + ".Url"), usuario, senha);
con.createStatement();
con.close();
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
} finally {
try {
if (con != null && !con.isClosed()) {
con.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
this.erro.append("Erro ao fechar conexão: " + ex.getMessage());
}
}
}
public String sair() {
FacesContext contexto = FacesContext.getCurrentInstance();
HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
sessao.invalidate();
login = null;
senha = null;
return "sair";
}
public String obterSessao() {
return "sessao";
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getBancoDados() {
return bancoDados;
}
public void setBancoDados(String bancoDados) {
this.bancoDados = bancoDados;
}
public StringBuilder getErro() {
return erro;
}
public void setErro(StringBuilder erro) {
this.erro = erro;
}
public SessionInfo getSessionInfo() {
return sessionInfo;
}
@Autowired
public void setSessionInfo(SessionInfo sessionInfo) {
this.sessionInfo = sessionInfo;
}
}