這段時(shí)間準(zhǔn)備發(fā)布產(chǎn)品,預(yù)覽版已在用戶那里部署。昨天接到一電話,說在https環(huán)境下,只要點(diǎn)擊到和Flex有關(guān)的東西就老報(bào)錯(cuò),然后權(quán)限消失,得重新登錄。
得知這一問題后自己切換到https下觀察,果然如此,而且只要是走BalzeDS AMF通道就必然報(bào)錯(cuò)且servelt session丟失。直觀感覺應(yīng)該是通道問題,隨后開打BlazeDS配置文件,翻到services-config.xml文件時(shí),發(fā)現(xiàn)了my-secure-amf通道,那么順理成章的應(yīng)該走這個(gè)。遂在Flex那里修改了AMFChannel對象的uri屬性(要實(shí)現(xiàn)通道切換方法很多,這只是一種方式),由于需要統(tǒng)一通道,所以在修改AMFChannel的uri后還是不能解決問題,經(jīng)過排查這里必須采用SecureAMFChannel對象才行,最后問題解決。那么要支持兩種協(xié)議,就需要在flex中進(jìn)行協(xié)議判定,通過不同的協(xié)議來切換不同的通道了。代碼如下:
請注意!引用、轉(zhuǎn)貼本文應(yīng)注明原作者:Rosen Jiang 以及出處: http://www.aygfsteel.com/rosen
得知這一問題后自己切換到https下觀察,果然如此,而且只要是走BalzeDS AMF通道就必然報(bào)錯(cuò)且servelt session丟失。直觀感覺應(yīng)該是通道問題,隨后開打BlazeDS配置文件,翻到services-config.xml文件時(shí),發(fā)現(xiàn)了my-secure-amf通道,那么順理成章的應(yīng)該走這個(gè)。遂在Flex那里修改了AMFChannel對象的uri屬性(要實(shí)現(xiàn)通道切換方法很多,這只是一種方式),由于需要統(tǒng)一通道,所以在修改AMFChannel的uri后還是不能解決問題,經(jīng)過排查這里必須采用SecureAMFChannel對象才行,最后問題解決。那么要支持兩種協(xié)議,就需要在flex中進(jìn)行協(xié)議判定,通過不同的協(xié)議來切換不同的通道了。代碼如下:
/**
* 處理協(xié)議
*/
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;



.;
}
* 處理協(xié)議
*/
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;




}
請注意!引用、轉(zhuǎn)貼本文應(yīng)注明原作者:Rosen Jiang 以及出處: http://www.aygfsteel.com/rosen