У меня есть приложение с Spring 4 и Spring security 3 на базе Jetty.
Только один пользователь может войти в систему с одинаковыми учетными данными.Если кто-то войдет в систему с тем же именем пользователя, предыдущий пользователь автоматически выйдет из системы.Все работает нормально, если приложение делает это само по себе, но иногда у вас возникает задержка, поэтому вам необходимо выполнить любой запрос к серверу на выход из системы.
Однако, если я попытаюсь обновить страницу во время входа в систему с помощью двух разных браузеров, у меня будет только 200 OK ответов без какой-либо информации.Только после следующего обновления у меня будет действительный ответ с информацией внутри.
У меня есть несколько фильтров в security.xml
<http use-expressions="true" entry-point-ref="restAuthenticationEntryPoint">
<access-denied-handler ref="accessDeniedHandler"/>
<custom-filter ref="responseFilter" position="FIRST"/>
<custom-filter ref="httpRequestSessionIdFilter" position="PRE_AUTH_FILTER"/>
<custom-filter ref="corsFilter" position="HEADERS_FILTER"/>
<custom-filter ref="preLogoutFilter" before="LOGOUT_FILTER"/>
Я думаю, что проблема где-то после ResponseFilter
.В этой ситуации другие пользовательские фильтры не запускаются:
public final class ResponseFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
ResponseWrapper responseWrapper = new ResponseWrapper((HttpServletResponse) response);
HttpServletRequest httpRequest = (HttpServletRequest) request;
chain.doFilter(request, responseWrapper);
String responseContent = new String(responseWrapper.getDataStream());
Я попытался снова вызвать chain.doFilter
, если данные ответа были пустыми, и это работает, но статус ответа и данные были разделены на два разных JSON.
Почему это происходит и как мне этого избежать?