這段時間準備發布產品,預覽版已在用戶那里部署。昨天接到一電話,說在https環境下,只要點擊到和Flex有關的東西就老報錯,然后權限消失,得重新登錄。
得知這一問題后自己切換到https下觀察,果然如此,而且只要是走BalzeDS AMF通道就必然報錯且servelt session丟失。直觀感覺應該是通道問題,隨后開打BlazeDS配置文件,翻到services-config.xml文件時,發現了my-secure-amf通道,那么順理成章的應該走這個。遂在Flex那里修改了AMFChannel對象的uri屬性(要實現通道切換方法很多,這只是一種方式),由于需要統一通道,所以在修改AMFChannel的uri后還是不能解決問題,經過排查這里必須采用SecureAMFChannel對象才行,最后問題解決。那么要支持兩種協議,就需要在flex中進行協議判定,通過不同的協議來切換不同的通道了。代碼如下:
請注意!引用、轉貼本文應注明原作者:Rosen Jiang 以及出處: http://www.aygfsteel.com/rosen
得知這一問題后自己切換到https下觀察,果然如此,而且只要是走BalzeDS AMF通道就必然報錯且servelt session丟失。直觀感覺應該是通道問題,隨后開打BlazeDS配置文件,翻到services-config.xml文件時,發現了my-secure-amf通道,那么順理成章的應該走這個。遂在Flex那里修改了AMFChannel對象的uri屬性(要實現通道切換方法很多,這只是一種方式),由于需要統一通道,所以在修改AMFChannel的uri后還是不能解決問題,經過排查這里必須采用SecureAMFChannel對象才行,最后問題解決。那么要支持兩種協議,就需要在flex中進行協議判定,通過不同的協議來切換不同的通道了。代碼如下:
/**
* 處理協議
*/
private function init(){
var surl:String = ExternalInterface.call("eval", "window.location.href");
var cs:ChannelSet = new ChannelSet();
var c:Channel = null;
if(URLUtil.getProtocol(surl)=="https"){
c = new SecureAMFChannel();
c.uri="/SSS/messagebroker/amfsecure";
}else{
c = new AMFChannel();
c.uri="/SSS/messagebroker/amf";
}
cs.addChannel(c);
remote.channelSet=cs;



.;
}
* 處理協議
*/
private function init(){
var surl:String = ExternalInterface.call("eval", "window.location.href");
var cs:ChannelSet = new ChannelSet();
var c:Channel = null;
if(URLUtil.getProtocol(surl)=="https"){
c = new SecureAMFChannel();
c.uri="/SSS/messagebroker/amfsecure";
}else{
c = new AMFChannel();
c.uri="/SSS/messagebroker/amf";
}
cs.addChannel(c);
remote.channelSet=cs;




}
請注意!引用、轉貼本文應注明原作者:Rosen Jiang 以及出處: http://www.aygfsteel.com/rosen