Я пытаюсь получить доступ к объекту сеанса из своего перехватчика, реализуя интерфейс SessionAware
(я реализовал метод setSession
), но я не могу получить свой объект сеанса таким образом.
Затем я попробовал ActionContext.getContext().getSession()
, и я могу получить сеанс, но я не знаю, но он становится пустым только в первый раз в каждом браузере для каждого пользователя, а затем он заполняется, когда вызывается другое действие.
Я предполагаю, что с сеансом что-то не так. Почему он дает мне пустой сеанс только в первый раз? Устанавливает ли он что-то только после первого запуска пустой сессии?
Если это так, то каждый будет отображаться как гость по первому запросу, а затем с именем пользователя по второму запросу и так далее.
Или я неправильно получаю сессию?
Я видел код для получения сессий в перехватчиках, но у меня это не работает, так как не может найти константу HTTP_REQUEST
.
final ActionContext context = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
HttpSession session = request.getSession(true);
Object user = session.getAttribute(Constants.USER_HANDLE);
Любое предложение по решению любой из проблем?
Кое-что, что я забыл упомянуть - мой веб-сайт является безопасным сайтом (https), поэтому, если пользователь не вошел в систему, он не позволит ему войти на веб-сайт, а если он вошел в систему, по крайней мере, его имя пользователя должно быть там в сеансе . Разве это не должно быть?
ServletConfigInterceptor
устанавливает значения для действий, но ничего не помещает в сеанс. В нынешнем виде ваш вопрос не дает мне достаточно информации, чтобы помочь вам. Содержит лиHttpServletRequest.getUserPrincipal()
нужную вам информацию о пользователе? - person Steven Benitez   schedule 16.08.2011ServletConfigInterceptor
. Он ничего не помещает в сессию. Он просто вводит различные вещи в ваше действие. :) И да, принципал пользователя должен быть установлен до вызова вашего действия. - person Steven Benitez   schedule 16.08.2011