HttpServletRequest#login () não está funcionando em java
-
21-09-2019 - |
Pergunta
j_security_check
Só não parece o suficiente para eu executar o processo de login. Então, em vez de enviar o formulário para j_security_check, criei meu próprio servlet e, na medida em que estou tentando fazer o login. Isso funciona, mas não consigo redirecionar para o meu recurso restrito. Alguém pode me dizer qual pode ser o problema? Isto é processRequest
Método do meu servlet:-
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String strUsername = request.getParameter("txtusername");
String strPassword = request.getParameter("txtpassword");
if(strUsername == null || strPassword == null || strUsername.equals("") || strPassword.equals(""))
throw new Exception("Username and/or password missing.");
request.login(strUsername, strPassword);
System.out.println("Login succeeded!!");
if(request.isUserInRole(ROLES.ADMIN.getValue())){//enum
System.out.println("Found in Admin Role");
response.sendRedirect("/app/Admin/home.jsf");
}
else if (request.isUserInRole(ROLES.GENERAL.getValue()))
response.sendRedirect("/app/Common/index.jsf");
else //guard
throw new Exception("No role for user " + request.getRemoteUser());
}catch(Exception ex){
//patch work why there needs to be blogger here?
System.out.println("Invalid username and/or password!!");
response.sendRedirect("/app/Common/index.jsf");
}finally {
out.close();
}
}
Tudo funciona bem e eu posso até ver a mensagem "encontrada na função de administrador", mas o problema é mesmo após a autenticação, não consigo redirecionar minha solicitação para outra página.
Solução
Não tenho certeza, mas acho que esse problema é o assunto de
Outras dicas
Remova essas linhas, elas não pertencem a lá:
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
e
out.close();
Se você fechar o OutputStream
, o redirecionamento não pode ser realizado. Você deveria de fato ter visto um IllegalStateException: Response already committed
nos logs do servidor.