Savio
Janeiro 28, 2008, 1:12pm
#1
Senhores, apos efetuar o logoff no sistema eu utilizo o metodo request.getSession().invalidate() para matar a sessao!!! Até aí tudo bem, mas quando eu aperto o botao de voltar do browser a sessao está válida novamente.
o codigo pra logoff:
else if ((comando != null) && (comando.equalsIgnoreCase(PAS_LOGOFF))) {
try {
req.getSession().invalidate();
} catch (IllegalStateException e) {
}
}
thingol
Janeiro 28, 2008, 1:27pm
#2
Properly handling the logout process in a password-protected Web
application requires more than just calling the
invalidate() method on the HttpSession
object because most modern browsers, with the Back and Forward
buttons, allow users to go back or...
Savio
Janeiro 28, 2008, 3:25pm
#3
cara, testando aki no InternetExplorer o problema nao ocorreu!!!
ao clicar no botao voltar apos efetuar o logoff e executar alguma requisao, ocorreu o que eu queria que era redirecionar para a tela de login.
no firefox da pala!!!
ao voltar ele gera um novo id pra sessao!!! muito estranho!!!
e com relaçao aos links dei uma olhada, por ser em ingles vou encontrar difuculdade mas vou ler!!!
mas fora isso, voces sabem pq isso está ocorrendo no firefox???
Leozin
Janeiro 29, 2008, 11:36am
#4
que tipo de autenticação vc utiliza?
Savio
Janeiro 30, 2008, 11:07am
#5
Minha servlet:
[code]public class Controlador extends HttpServlet {
private static final long serialVersionUID = 1L;
private BcPassUsuario m_bcPassUsuario;
private RequestDispatcher dispatcher;
private VoPassUsuario voPassUsuario = null;
private Connection connection;
private final String ROOT_JSP = "/wrk/";
private final String PAS_LOGON = "pas001";
private final String PAS_TROCA_SENHA = "pas002";
private final String PAS_LOGOFF = "pas003";
private final String PAS_DIV_TROCA_SENHA = "pas006";
String urlDestino = ROOT_JSP;
HttpSession session = null;
/**
* metodo responsavel pela inicializaçao do servlet.
*/
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
connection = getNewConexao();
initBcPassUsuario();
} 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 senha = req.getParameter("senha");
String login = req.getParameter("usuario");
String novasenha = req.getParameter("novasenha");
String repetirnovasenha = req.getParameter("repetirnovasenha");
initUsuario(req);
req.setAttribute("usuario", login);
try {
urlDestino = "login.jsp";
if ((comando != null) && (comando.equalsIgnoreCase(PAS_LOGON)) ) {
if( m_bcPassUsuario.autenticar(senha, login) ){
if (session == null || voPassUsuario == null) {
session = req.getSession();
} else {
checkSession(req);
}
voPassUsuario = (VoPassUsuario) m_bcPassUsuario.getVo();
session.setAttribute("sUsuario", voPassUsuario);
Calendar limiteTrocaSenha = Calendar.getInstance();
Date dataTrocaSenha = voPassUsuario.getTrocaSenhaData();
if (dataTrocaSenha == null) {
voPassUsuario.setExpirado(true);
} else {
limiteTrocaSenha.setTime(dataTrocaSenha);
limiteTrocaSenha.add(Calendar.DATE, voPassUsuario.getExpira());
if (limiteTrocaSenha.getTimeInMillis() < new Date().getTime()) {
voPassUsuario.setExpirado(true);
}
}
if (!voPassUsuario.isExpirado()){
voPassUsuario = m_bcPassUsuario.ultimoAcesso(voPassUsuario.getIdUsrLocal());
urlDestino = "index.jsp";
} else {
urlDestino = "trocaSenha.jsp";
throw new ServletException("Senha Expirada. Por favor, efetue a troca da senha.");
}
req.getSession().setAttribute("sistemas", buscarSistemasDoUsuario(voPassUsuario.getIdUsrLocal()));
}
}[/code]
Chamando esse metodo da minha classe de negocio:
[code]public class BcPassUsuario extends BusinessComponent {
public boolean autenticar(String senha, String login) throws Exception {
initRcPassUsuario();
if((login.trim().length() == 0 || (senha.trim().length() == 0))) {
setErro("1");
throw new Exception("Dados insuficientes para o acesso.");
}
if (buscarPorLogin(login)) {
if(!criptografaSenha(senha).equals(getSenhaLocal()) ) {
setErro("2");
throw new Exception("Senha inválida.");
}
} else {
setErro("3");
throw new Exception("Acesso Inválido. Usuário inexistente.");
}
return true;
}[/code]
essa é a forma de autenticação!!!