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.

Foi útil?

Solução

Não tenho certeza, mas acho que esse problema é o assunto de

https://glassfish.dev.java.net/issues/show_bug.cgi?id=11340

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top