Подтвердить что ты не робот

Как я могу предотвратить spring -security от добавления: jsessionid = XXX для переадресации входа?

Когда клиент, не прошедший проверку подлинности, запрашивает URL-адрес, для которого требуется неанонимный уровень доступа, как определено в security-config.xml, защита spring отправляет перенаправление HTTP на нашу страницу входа (например, /login). Это прекрасно.

Проблема заключается в том, что отсутствует существующий сеанс (указанный cookie, предоставленный в запросе клиента), spring -security вызывает перенаправление, которое также указывает новый сеанс клиента в URL-адресе, например. /login;jsessionid=8o7pglapojus.

Многие контейнеры поддерживают это (видимо, он отлично работает в tomcat?), но похоже, что Jetty (именно это мы сейчас используем) не перенаправляет URL-адрес на наш URL-маршрутизатор полностью неповрежденным (в том числе параметр jsessionid "), и именованный сеанс не связан с запросом /login по вызову jetty/spring -security (т.е. полностью новый идентификатор сеанса представлен в заголовке Set-Cookie ответа на /login).

Мы можем обойти это, сопоставляя /login.* на наших маршрутах, но мне любопытно, есть ли способ предотвратить выброс идентификатора сеанса в перенаправление аутентификации для начала.

4b9b3361

Ответ 1

В Spring Security 3.0.0 M1 или новее вы можете установить disable-url-rewriting="true" в пространстве имен <http>. Посмотрите, поможет ли это. Также см. Этот запрос функции.

Ответ 2

Теперь это выглядит так.

<security:http auto-config="false" use-expressions="true" disable-url-rewriting="true">

После этого ваше приложение будет неспособно выполнять корректные задания должным образом.

Ответ 4

@ahmet alp balkan:

seamframework обеспечивает лучшее решение, чем случайные кодеры. http://seamframework.org/Documentation/RemovingJSESSIONIDFromYourURLsAndFixingScache

@BalusC:

Если разработчик использовал spring security FilterChainProxy для реализации функции securtiy, просто не используя пространство имен http.

Тогда мы не смогли найти способ добавить disable-url-rewriting, не пытаясь добавить настраиваемый фильтр для фильтрации цепочки или вставить независимый фильтр в web.xml.

Ответ 5

Поскольку вы используете jetty, просто добавьте следующий тег context-param в свой web.xml,

<!-- Disables appending JSESSSIONID in browser address bar/requests -->
<context-param>
    <param-name>org.eclipse.jetty.servlet.SessionIdPathParameterName</param-name>
    <param-value>none</param-value>
</context-param>

Обратитесь: Управление сеансом - Jetty Doc