Я использую этот код. Когда я нажимаю, сначала он проверяет, является ли сеанс нулевым, затем аннулирует сеанс в аутентификацииServices.logout(getHttpServletRequest()) И при следующем запросе он переходит на страницу входа. Я хочу перейти на страницу входа, когда нажимаю запрос после аннулирования сеанса.
public class LogOutAfterChangePasswordInterceptor extends BaseInterceptor {
private static final long serialVersionUID = 5906534052815899264L;
private static final Logger LOG =
LoggerFactory.getLogger(LogOutAfterChangePasswordInterceptor.class);
private static final String ACTIONS_TO_REMEMBER = "static-password-setting-result";
private static final String PASSWORD_CHANGED_FLAG = "passwordChanged";
public static final String LOGIN = "login";
@Inject
private AuthenticationServices authenticationServices;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
invocation.addPreResultListener((actionInvocation, resultCode) -> {
HttpServletRequest request = getHttpServletRequest();
HttpSession session = request.getSession(false);
if (getActionName().contains(ACTIONS_TO_REMEMBER)) {
LOG.trace("push URL `{}` that user after that should be logout ",
ACTIONS_TO_REMEMBER);
session.setAttribute(PASSWORD_CHANGED_FLAG, true);
} else {
Boolean passwordChanged = session != null ? (Boolean)
session.getAttribute(PASSWORD_CHANGED_FLAG) : null;
if (passwordChanged != null && passwordChanged) {
// Perform logout or other necessary actions
session.removeAttribute(PASSWORD_CHANGED_FLAG);
LOG.trace("User will be logged out after the next request");
try {
authenticationServices.logout(getHttpServletRequest());
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// logout spring manually
Authentication auth =
SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
new
SecurityContextLogoutHandler().logout(getHttpServletRequest(),
getHttpServletResponse(),auth);
}
SecurityContextHolder.getContext().setAuthentication(null);
}
}
});
HttpServletRequest request = getHttpServletRequest();
HttpSession session = getHttpServletRequest().getSession(false);
if (session == null || !request.isRequestedSessionIdValid()) {
return LOGIN;
}
return invocation.invoke();
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... login-page
По истечении времени сеанса для перехода на страницу входа требуется двойной щелчок. ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
По истечении времени сеанса для перехода на страницу входа требуется двойной щелчок.
Anonymous » » в форуме JAVA - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
По истечении времени сеанса для перехода на страницу входа требуется двойной щелчок.
Anonymous » » в форуме JAVA - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-
-
-
По истечении времени сеанса для перехода на страницу входа требуется двойной щелчок.
Anonymous » » в форуме JAVA - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
По истечении времени сеанса для перехода на страницу входа требуется двойной щелчок.
Anonymous » » в форуме JAVA - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-