Получение JSESSIONID cookie в сообщениях автономного приложения BlazeDS

У меня есть гибкое приложение, использующее BlazeDS, чтобы общаться с веб-приложением с помощью Spring Security. Во время обычного использования пользователь уже вошел в веб-приложение перед запуском гибкого приложения, поэтому браузер позаботится о передаче файла cookie сеанса JSESSIONID в исходящие сообщения, чтобы веб-приложение знало, от кого они исходят.

Однако я хотел бы иметь возможность запускать гибкое приложение из моей IDE (IntelliJ IDEA) для отладки, что означает отсутствие предыдущего входа в систему и, следовательно, отсутствие существующего сеанса. Я вставил код - просто для отладки - чтобы сначала отправить сообщение для входа в систему. Это работает, и файл cookie JSESSIONID приходит с ответом, но я не знаю, как прикрепить его к последующим вызовам удаленного взаимодействия BlazeDS, которые делает приложение.

Есть ли какая-то конфигурация канала, которая делает это, или какой-то другой метод? И если вы собираетесь указать мне на пример предварительной аутентификации BlazeDS / SpringSecurity, я ценю эту мысль, но у нас уже есть довольно сложная конфигурация Spring Security, и я не хочу связываться с этим.

Кстати, я был немного сбит с толку, когда попытался последовать предложению вызвать login() в ChannelSet RemoteObject только для того, чтобы обнаружить, что ChannelSet был нулевым. Я не понимаю, как это может быть, поскольку удаленные вызовы работают, используя - я могу только предположить - канал AMF, определенный в services-config.xml. В любом случае, я не знаю, работает ли login(), отправляя j_username и j_password на /j_spring_security_check, так что это могло быть неуместно; и, конечно же, я останусь с темой этого запроса, а именно с тем, как использовать сеанс после его создания.

Я не думаю, что это поможет что-либо объяснить, но я включу несколько фрагментов кода и конфигурации ...

Логин:

<mx:HTTPService id="loginRequest" url="http://fiddler:8080/app/j_spring_security_check" useProxy="false"
            method="POST" result="handleLoginResult(event)">
<mx:request xmlns="">
    <j_username>username</j_username>
    <j_password>password</j_password>
</mx:request>
</mx:HTTPService>

RemoteObject:

<mx:RemoteObject id="remoteObject" destination="blazebackend">
    <mx:method name="getConfigData" result="handleConfigDataResult(event)" fault="handleFault(event)"/>
    <mx:method name="addSession" result="handleAddSessionResult(event)" fault="handleFault(event)"/>
</mx:RemoteObject>

Канал:

<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
    <endpoint url="/{context.root}/app/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>

TIA.


person Michael    schedule 29.03.2011    source источник


Ответы (1)


Я хотел бы иметь возможность запускать гибкое приложение из моей IDE (IntelliJ IDEA) для отладки

Используя Eclipse, вы можете выполнять отладку внутри Eclipse IDE при развертывании на локальном или удаленном сервере, настроив «URL-адрес или путь для использования» при запуске отладки.

JESSIONID означает, что вы используете аутентификацию Java EE, метод входа в ChannelSet может использоваться для пользовательской и / или базовой аутентификации (которая может быть аутентификацией Java EE или нет), я думаю, что лучше всего для вас развернуть на localhost или в конечном итоге снять защиту при отладке.

person snowflake    schedule 30.03.2011
comment
Спасибо, снежинка. Так случилось, что я запускаю Tomcat на локальном хосте, и я бы с радостью отключил безопасность для отладки, но именно фильтр безопасности, основанный на приготовлении сеанса, дает веб-приложению информацию о том, какого пользователя он разговаривает с. Если бы я разрешил анонимный вход, у него не было бы этой информации. - person Michael; 30.03.2011