Переменная сеанса не установлена ​​в Spring - PullRequest
2 голосов
/ 20 октября 2010

У меня есть контроллер Spring, который помещает переменную в сеанс:

public class LoginFormController extends SimpleFormController {

    public ModelAndView onSubmit(HttpServletRequest request, 
            HttpServletResponse response, Object command) throws Exception {

            request.getSession().setAttribute("authenticated_user", "authenticated_user");
    }
}

У меня есть HandlerInterceptor.В методе preHandle я проверяю переменную в сеансе:

public boolean preHandle(HttpServletRequest request,
                                      HttpServletResponse response,
                                      Object handler) throws Exception {

        /* first, check if the requested view even required authentication */
        if (isAuthenticationRequired(request)) {

            /* check to see that user is logged in */
            if (null == request.getSession().getAttribute("authenticated_user")) {
                forwardToLogonPage(request, response);
                return false;
            }
            /* all is ok - pass the request on */
            return true;
        }
        /* all is ok - pass the request on */
        return true;
    }

Проблема в том, что, похоже, переменная сеанса не устанавливается, так как request.getSession (). GetAttribute ("authenticated_user"))всегда разрешается до нуля.

Есть идеи, плз?

Спасибо, Krt_Malta

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Вы также можете добавить атрибуты ServletRequestAttributes.Включая:

import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;

Я сделал это в абстрактном суперконтроллере, чтобы все мои контроллеры были осведомлены о запросе сервлета.

Чтобы извлечь используемый вами объект запроса, можно использовать следующее

protected ServletRequestAttributes getServletRequest(){
    return (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
  }
0 голосов
/ 19 января 2011

Попробуйте throw new ModelAndViewDefiningException(new ModelAndView("logonPage")) вместо return false.

И в вашей logonPage явно включите действие в тег формы, что-то вроде этого:

<form:form method="post" commandName="login" action="logonPage.htm">
...