Обрабатывать событие истекшего сеанса в веб-приложении на основе Spring
Я использую функцию безопасности Spring в своем приложении, но я обнаружил, что, когда сеанс истек, все запросы ajax возвращают страницу login.jsp(не перенаправляет, в ответе http, он помещает все html-содержимое), которая является страницей входа моего веб-приложения. Я использовал много запросов ajax в своем приложении, и цель - вернуть определенный код ошибки, например 510, вместо страницы входа.
<session-management session-authentication-strategy-ref="example" />
без invalid-session-url Я попытался сделать invalid-session-url = "", не работает. Большое спасибо
1 ответ
Решение
Использовать пользовательский AuthenticationEntryPoint:
package com.example.spring.security
// imports here
public class AjaxAwareAuthenticationEntryPoint
extends LoginUrlAuthenticationEntryPoint {
public AjaxAwareAuthenticationEntryPoint(final String loginFormUrl) {
super(loginFormUrl);
}
@Override
public void commence(final HttpServletRequest request, final HttpServletResponse response, final AuthenticationException authException)
throws IOException, ServletException {
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
response.sendError(403, "Forbidden");
} else {
super.commence(request, response, authException);
}
}
}
Определите боб и используйте его как entry-point-ref
в <http>
элемент:
<http entry-point-ref="authenticationEntryPoint">
<!-- more configuration here -->
</http>
<bean id="authenticationEntryPoint"
class="com.example.spring.security.AjaxAwareAuthenticationEntryPoint">
<constructor-arg value="/login.jsp"/>
</bean>