Я использую этот код. Когда я нажимаю, сначала он проверяет, является ли сеанс нулевым, затем аннулирует сеанс в аутентификации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
Программисты JAVA общаются здесь
1730549614
Anonymous
Я использую этот код. Когда я нажимаю, сначала он проверяет, является ли сеанс нулевым, затем аннулирует сеанс в аутентификации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();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79150632/when-the-session-times-out-a-double-click-is-required-to-go-to-the-login-page[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия