Ola, pessoal blz?
To fazendo um sistema onde os usuarios aqui da empresa poderao acessar todos os sistemas em que eles possuem acesso atraves dele, um Single Sign On. Já desenvolvi as funcionalidades de login/logof e troca de senha. So que quando eu vou clicar em SAIR, Trocar Senha, ou quando lança alguma exceção a URL vai crescendo, acrescentando o nome da servlet.
Assim: http://localhost:8080/SingleSignOn/control/control/control/control/control/control/site
O que poderia estar ocasionando isso?
segue minha servlet.
[code]package br.com.cabal.SingleSignOn.web.commands.controle;
import java.io.IOException;
import java.sql.Connection;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import br.com.cabal.SingleSignOn.bean.FrmMeusSistemas;
import br.com.cabal.SingleSignOn.core.MensagemBean;
import br.com.cabal.SingleSignOn.modelo.bc.BcPassUsuario;
import br.com.cabal.SingleSignOn.modelo.bc.BcPassUsuarioSistema;
import br.com.cabal.SingleSignOn.modelo.vo.VoPassUsuario;
import br.com.cabal.SingleSignOn.modelo.vo.VoPassUsuarioSistema;
import br.com.cabal.commons.db.Conecta;
/**
*
- @author saviom
*/
public class Controlador extends HttpServlet {
private static final long serialVersionUID = 1L;
private BcPassUsuario m_bcPassUsuario;
private BcPassUsuarioSistema bcPassUsuarioSistema;
private RequestDispatcher rd;
private VoPassUsuario voPassUsuario = null;
// private VoPassUsuarioSistema voPassUsuarioSistema = null;
private Connection connection;
FrmMeusSistemas meusSistemas;
private final String ROOT_JSP = "/wrk/";
private final String PAS_LOGON = "pas001";
// private final String PAS_TELA = “pas002”;
private final String PAS_TROCA_SENHA = “pas003”;
private final String PAS_LOGOFF = “pas004”;
private final String PAS_TROCA_TELA = “pas005”;
/**
* metodo responsavel pela inicializaçao do servlet.
*/
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
connection = getNewConexao();
initBcPassUsuario();
initBcPassUsuarioSistema();
} catch (Exception e) {
config.getServletContext().setAttribute("msgErro", e.getMessage());
}
}
/**
* metodo responsavel pelas requisiçoes vindas do cliente.
*/
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String comando = req.getParameter("odr");
String urlDestino = ROOT_JSP;
MensagemBean msgBean = new MensagemBean();
initUsuario(req);
try {
if ((comando != null) && (comando.equalsIgnoreCase(PAS_LOGON)) ) {
urlDestino = ROOT_JSP + "login.jsp";
voPassUsuario = m_bcPassUsuario.autenticar(req.getParameter("senha"), req.getParameter("usuario"));
HttpSession sessao = req.getSession();
sessao.setAttribute("sUsuario", voPassUsuario);
// bcPassUsuarioSistema.buscarSistemasDoUsuario(voPassUsuario.getIdUsrLocal());
if (!voPassUsuario.isExpirado()){
urlDestino = ROOT_JSP + “index.jsp”;
} else {
urlDestino = ROOT_JSP + “trocaSenha.jsp”;
throw new ServletException(“Senha Expirada. Por favor, efetue a troca da senha.”);
}
}
//Troca a senha do usuário expirado.
else if ((comando != null) && (comando.equalsIgnoreCase(PAS_TROCA_SENHA)) ||
(comando != null) && (comando.equalsIgnoreCase(PAS_TROCA_TELA)) ) {
urlDestino = ROOT_JSP + "trocaSenha.jsp";
if(comando.equalsIgnoreCase(PAS_TROCA_SENHA)){
if ((req.getParameter("senha").length() > 0) && ((req.getParameter("senha") != null)) &&
(req.getParameter("novaSenha").length() > 0) && ((req.getParameter("novaSenha") != null)) &&
(req.getParameter("confirmacaoSenha").length() > 0) && (req.getParameter("confirmacaoSenha") != null)) {
if (req.getParameter("novaSenha").equals(req.getParameter("confirmacaoSenha"))) {
voPassUsuario = validarSenhaAtual(
m_bcPassUsuario.criptografaSenha(req.getParameter("senha")),
m_bcPassUsuario.criptografaSenha(req.getParameter("novaSenha")));
voPassUsuario = m_bcPassUsuario.alterarSenha(voPassUsuario.getIdUsrLocal(),
m_bcPassUsuario.criptografaSenha(req.getParameter("novaSenha")));
voPassUsuario.setExpirado(false);
urlDestino = ROOT_JSP + "index.jsp";
} else {
throw new ServletException("A nova senha e a confirmação devem ser iguais.");
}
}
}
}
//Faz logoff do usuário
else if ((comando != null) && (comando.equalsIgnoreCase(PAS_LOGOFF))) {
HttpSession sessao = req.getSession();
sessao.setAttribute("sUsuario", voPassUsuario);
sessao.invalidate();
urlDestino = ROOT_JSP + "login.jsp";
}
connection.commit();
} catch (Exception e ) {
msgBean.setTipo(MensagemBean.ERRO);
msgBean.setTitulo("Erro");
msgBean.setMensagem(e.getMessage());
req.setAttribute("msgBean", msgBean);
e.printStackTrace();
} finally {
rd = getServletContext().getRequestDispatcher(urlDestino);
rd.forward(req, res);
}
}
/**
*
* @param senha
* @param novaSenha
* @return
* @throws Exception
*/
public VoPassUsuario validarSenhaAtual(String senha, String novaSenha)
throws Exception {
if (!voPassUsuario.getSenhaLocal().equals(senha)) {
throw new Exception("A senha atual não confere.");
}
if (voPassUsuario.getSenhaLocal().equals(novaSenha)) {
throw new Exception("A senha atual é igual a anterior.");
}
return voPassUsuario;
}
/**
* metodo que faz a conexao com a base de dados.
*/
private static Connection getNewConexao() {
try {
return new Conecta().getConectaOLTESTE();
} catch (Exception e) {
e.printStackTrace();//lança as exceçoes na console.
return null;
}
}
private void initUsuario(HttpServletRequest request) {
if (voPassUsuario == null) {
voPassUsuario = (VoPassUsuario) request.getSession().getAttribute("sUsuario");
}
}
private void initBcPassUsuario() {
if (m_bcPassUsuario == null) {
m_bcPassUsuario = new BcPassUsuario(connection);
}
}
private void initBcPassUsuarioSistema() {
if (bcPassUsuarioSistema == null) {
bcPassUsuarioSistema = new BcPassUsuarioSistema(connection);
}
}
}[/code]