Я использую приложение GWT, которое поддерживает кэш пользователя в объекте сеанса.Я использую Spring Security 3.0.5.
Ниже приведен код, который я использую для получения объекта сеанса
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpSession session = attr.getRequest().getSession(false);
if(session != null)
return session;
else
throw new IllegalStateException("Session Expired");
В размещенном режиме, т.е. на сервере Jetty, все работает нормально, и я могуполучить объект сеанса, но в веб-режиме, т.е. tomcat 6, объект сеанса возвращается null
Я использую следующие записи в файле web.xml, необходимые для запуска вышеуказанного кода
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
ОБНОВЛЕНИЕ
Ниже приведены настройки безопасности пружины, которые я использую
<http>
<intercept-url pattern="/**Phoenix.html*" access="ROLE_ADMIN"/>
<form-login authentication-failure-url="/login.html" default-target-url="/Phoenix.html?gwt.codesvr=127.0.0.1:9997" always-use-default-target="true"/>
<remember-me/>
<logout />
<access-denied-handler error-page="/login.html"/>
<session-management><concurrency-control/></session-management>
</http>
ОБНОВЛЕНИЕ
Это происходит потому, что в веб-режиме послеlogin SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString()
возвращает «anonymousUser», в то время как в размещенном режиме это же выражение возвращает учетные данные пользователя, вошедшего в систему. Ниже приведены URL-адреса, которые я использую в размещенном режиме: http://127.0.0.1:8888/Phoenix.html?gwt.codesvr=127.0.0.1:9997
веб-режим: http://localhost:8185/PhoenixMCDemo/Phoenix.html;jsessionid=E56C80258410D102E6B51EFEE5AA0E91