web.xml
содержит:Остановка сеанс пролонгация весной проект
<session-config>
<session-timeout>30</session-timeout>
</session-config>
Spring security-context.xml
имеет пользовательскую OAuth фильтр авторизации 2,0:
<sec:http use-expressions="true" auto-config="false"
entry-point-ref="oauthEntryPoint"
authentication-manager-ref="oauthAuthenticationManager">
<sec:custom-filter position="FORM_LOGIN_FILTER" ref="myFilter" />
...
</sec:http>
Как уже сессия действует attemptAuthentication
метода myFilter
не был назван. Если сеанс истек attemptAuthentication
, метод запросит REST API настраиваемого сервера OAuth 2.0, чтобы проверить действительность токена OAuth (затем перенаправить на страницу входа или продлить сеанс).
Сессия имеет тайм-аут 30 минут, токен OAuth имеет 1 дневной тайм-аут.
Если пользователь сохраняет активность в течение 30 минут - сеанс автоматически продлевается, и пользователь может войти в систему в течение многих дней, когда токен OAuth становится недействительным!
Как аннулировать сеанс с первого входа в систему не с момента последнего доступа к сайту?
UPDATE Посмотрите также на мой вопрос о http://forum.spring.io/forum/spring-projects/security/725894-help-with-stoping-sesstion-prolongation
Я прочитал Servlet 2.1 спецификации. Кажется, что сеанс управляется контейнером, который предоставляет API-интерфейс Servlet. Он имеет тайм-аут сеанса, чтобы избежать перегрузки памяти из старых неактивных сеансов.
Таким образом, у вас нет контроля над истечением срока действия сеанса. Для достижения моей цели я могу связать специальную временную отметку времени с сеансом и проверить ее на предмет истечения срока действия.
Но, как говорят, Уилл Килинг эта информация уже хранится в session
:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession(false);
if (session == null)
logger.warn("session is null");
else
logger.warn("session created at {}", session.getCreationTime());
getCreationTime хранить необходимую информацию, спасибо! +1 – gavenkoa
http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpSession.html#getCreationTime%28%29 – gavenkoa