HttpServletRequest # login () не работает в Java - PullRequest
1 голос
/ 20 марта 2010

j_security_check мне просто не хватает времени для входа в систему. Таким образом, вместо отправки формы в j_security_check я создал свой собственный сервлет, и в этом программно пытаюсь выполнить вход в систему. Это работает, но я не могу перенаправить на свой ограниченный ресурс. Кто-нибудь может сказать мне, в чем может быть проблема? Это processRequest метод моего сервлета: -

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();
        }
    } 

Все работает нормально, и я даже вижу сообщение "Найдено в роли администратора", но проблема даже после аутентификации, я не могу перенаправить свой запрос на какую-то другую страницу.

Ответы [ 2 ]

1 голос
/ 23 марта 2010

я не уверен, но я думаю, что этот вопрос является предметом

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

0 голосов
/ 20 марта 2010

Удалите эти строки, они там не принадлежат:

    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

и

        out.close();

Если вы закроете OutputStream, перенаправление не будет выполнено. На самом деле вы должны были видеть IllegalStateException: Response already committed в журналах сервера.

...