2009-11-12 4 views
1

кажется, что имя параметра в запросе GET, которое представляет SessionID (например, jsessionid = XXXXXXXXXXXXXXXX в Tomcat), не стандартизировано в сервлет-спецификации? Как я могу получить имя (имя сертификата Servelt) для SessionID? (По крайней мере, в Websphere, возможно, есть возможность изменить имя SessionID-Parameter-Name)Java SessionID: как получить имя параметра GET SessionID?

=> Проблема с подкладкой - мне нужно закодировать URL-адрес в сервлете ALWYAS с идентификатором сеанса. Но кажется, что метод response.encodeURL() только делает это, если Cookies отключены (=> для этого используется URL-переписывание с идентификатором sessionID в URL-адресе).

Что было бы альтернативой всегда кодировать URL-адрес с идентификатором сеанса в сервлет? Поскольку первый вопрос подразумевает, что я хотел бы построить sessionid самостоятельно, но мне поэтому нужно имя SessionID-Parameter Name, которое, как представляется, не стандартизировано, поэтому мне как-то нужно получить имя параметра откуда-то ...)

ОБНОВЛЕНИЕ: Цель состоит в том, чтобы сохранить функциональность SessionManagement, предоставляемую сервлет-контейнером, а не полностью отключать ее. Мне нужно передать URL-адрес обратного вызова в стороннюю систему, в которой я хочу всегда содержать SessionURL. Так что я только хочу, чтобы кодировать этот одного URL всегда с SESSIONID, чтобы свести к минимуму любые проблемы безопасности ...

Большое спасибо Jan

ответ

3

jsessionid не на самом деле параметр запроса, он кодируется к самому URL-адресу, а затем декодируется и удаляется контейнером до того, как он дойдет до вашего контроллера. Значение самого jsessionid можно получить из HttpSession.getId().

Если вы хотите остановить Tomcat с помощью куки, то вы можете предоставить TOMCAT конкретных context.xml файл под WEB-INF, содержащий что-то вроде этого:

<Context cookies="false" path="/path/to/my/webapp"> 
</Context> 

Это будет отключить все куки для этого веб-приложение, и кот затем должен автоматически кодировать все идентификаторы сеанса на URL-адрес.

+0

Привет, скаффман, спасибо за ваш ответ. Ваш провайдер ответов интересует информацию, которую я не знал, но не решает проблему. Я хочу сохранить Session-Management, как это предусмотрено Servlet-контейнером, но, однако, «принудительно» контейнер для кодирования определенного URL-адреса, я перейду в систему третьей стороны. Для «соображений безопасности» я хочу, чтобы URL-адрес обратного вызова не полагался на файлы cookie, а всегда содержит идентификатор сеанса, который я установил в URL-адресе обратного вызова. Как описано выше, я поэтому должен найти способ всегда кодировать мой URL с идентификатором сеанса. спасибо jan. – jan

+0

API-интерфейс Servlet не позволяет принудительно использовать контейнер. Для каждого контейнера вам нужно будет использовать собственный механизм. – skaffman

+0

привет, скаффман, спасибо, кажется, что это не совсем возможно, что я пытаюсь сделать ... – jan