Как заставить приложение на базе Spring работать с параметром URL-адреса jsessionid - PullRequest
2 голосов
/ 20 февраля 2012

У нас есть приложение с REST API.Он основан на Spring, Spring Spring также используется.Например, мы настроили некоторые ограничения на основе ролей:

<sec:http auto-config="true" access-decision-manager-ref="accessDecisionManager">
    <sec:intercept-url pattern="/auth/authenticate" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <sec:intercept-url pattern="/auth/logout" access="IS_AUTHENTICATED_FULLY"/>
    <sec:intercept-url pattern="/users/**" access="USER"/>
</sec:http>    

Он отлично работает с файлами cookie, но теперь нам нужно включить возможность передавать jsessionid в качестве параметра URL вместо файлов cookie.Я думал, что нам не нужно ничего менять в нашем коде, но что-то идет не так.Я запрашиваю метод входа в систему и копирую jsessionid из ответа.После этого я пытаюсь запросить / users; jsessionid = * и получил код состояния 401, это означает, что приложение не распознало меня.Что мы должны изменить, чтобы этот подход работал?

1 Ответ

2 голосов
/ 20 февраля 2012

Как правило, система проверки подлинности на основе файлов cookie не подходит для API на основе XML (таких как SOAP и REST). Практика заключается в аутентификации при каждом вызове API.

Проверьте этот пост в том же форуме. Цитирую пост:

Служба REST обычно аутентифицируется при каждом запросе, не обычно сессией.

Теперь причины этого

  • Клиентами или потребителями этих API-интерфейсов XML-баз являются не браузеры, а другие приложения.
  • Браузер понимает куки, фактически куки предназначены для пользователей на основе браузера, но не для приложений в целом.
  • Клиент может понимать или не понимать cookie-файлы и в большинстве случаев НЕ будет понимать, что Cookies не является стандартным подходом для аутентификации для API такого типа.

Есть лучшие способы, чем обрабатывать это нестандартным способом cookie. Не уверен, какую версию Spring-Security вы используете, ЗДЕСЬ является примером Spring-Security 3.1, используемой для защиты приложения RESTful.

EDIT:

Проверьте эту ссылку . Это заставляет tomcat (не уверен, что вы используете tomcat) не обрабатывать сеанс с использованием файлов cookie. Но когда это будет сделано, это не будет обрабатывать сеанс на основе файлов cookie. Я не уверен на 100%, что это сработает, но вы можете попробовать.

...