Flex端调rtx接口实现自动登录
来源:互联网 发布:如何连接网络投影仪 编辑:程序博客网 时间:2024/05/23 07:24
首先,前端登陆页面取出地址栏的用户名和rtx签名,用Flex的外部API ExternalInterface 类的call()方法
[Bindable] private var userName:String=""; [Bindable] private var sign:String=""; protected function application1_creationCompleteHandler(event:FlexEvent):void { var str:String = ExternalInterface.call("window.location.href.toString"); // str="http://10.10.1.88:8012/SignAuth.cgi?rtxid=yuanzhan.yu&sign=Fx%2Fo4YeKF075INAQSBsbRNY9IWwk7C%2B8b9R4hlSLzMs%3D"; var arr:Array = str.split("&"); if(arr.length >= 2) { var index1:int = arr[0].indexOf("rtxid="); userName = arr[0].substr(index1 + 6); var index2:int = arr[1].indexOf("sign="); sign = arr[1].substr(index2 + 5); } this.currentState = "empty"; userName = userName; UserSession.getInstance().Socket=new SocketClient(); UserSession.getInstance().Socket.addEventListener("SOCKET_CONNECT", ReturnLoginState);//从SocketClient派发事件,通知Socket已经连上了 UserSession.getInstance().Socket.addEventListener("DotConnectedServer", function():void { Alert.show("未连接上服务器!请咨询技术人员!","提示") this.currentState = "ShowLoginViewPage"; }); }
Socket监听的回调函数,将用户名,密码,rtx签名写入Socket,传到后台:
private function ReturnLoginState(event:RecievePacketEvent):void { UserSession.getInstance().Socket.removeEventListener("SOCKET_CONNECT", ReturnLoginState); UserSession.getInstance().Socket.AddSessionConnect(); var vUserName:String=userName; var vUserPwd:String=""; var vSign:String=sign; var vwriteData:WriteDataPacket=new WriteDataPacket(LogicConfig.USER_LOGIN,0); vwriteData.writeString(vUserName); vwriteData.writeString(vUserPwd); vwriteData.writeString(vSign); UserSession.getInstance().Socket.writeData(vwriteData); //添加Socket调用用户登录事件 UserSession.getInstance().Socket.addEventListener(LogicConfig.Contract[LogicConfig.USER_LOGIN]+0,this.UserLogin) }
后台java端接收到数据,调用自定义的rtxValid()方法进行rtx签名验证:
@LogicCode(LogicId = Pact.USER_LOGIN, Desc = "用户登录") public static void userLogin(IoSession pSession, ReadDataPackage pPackage) { try { String user = pPackage.GetString().trim(); String pwd = pPackage.GetString(); String sign = pPackage.GetString(); boolean isValid = false;//IsValid(user, pwd); if(pwd.equals("")) isValid = rtxValid(user,sign); else isValid = IsValid(user, pwd); String returnInfo = "用户名或密码错误,请重新输入!"; if (isValid) { String vViewId = "UserLoginConfirmByUserName"; int vDataCount = 1; String[] vParams = new String[1]; vParams[0] = user; List<String> vParaNameArr = Main.DataViewParas.get(vViewId).getParaNames(); ResultSet[] vCachedRowSetImpl = DataHelper.getDate(vViewId, vParaNameArr, vParams, 3, vDataCount); ResultSet pData = vCachedRowSetImpl[0]; pData.beforeFirst(); if (pData.next()) { int roleId = pData.getInt(1); String roleName = pData.getString(2); int userId = pData.getInt(3); returnInfo = roleName; /** 用户信息 */ UserInfoSession.vUserName = user; UserInfoSession.vPWD = pwd; UserInfoSession.vLanguage = "CHS"; UserInfoSession.vGame_ID = 0; UserInfoSession.vRole_ID = roleId; UserInfoSession.vUsr_ID = userId; } else { isValid = false; returnInfo = "账号未激活,请联系管理员!"; } } WriteDataPackage vData = new WriteDataPackage(Pact.USER_LOGIN, pPackage.GetMarkId()); vData.SetBoolean(isValid); if (isValid) { vData.SetInt(UserInfoSession.vUsr_ID); } vData.SetString(returnInfo); pSession.write(vData); } catch (Exception e) { System.out.print(e.toString()); } }
验证函数为:
private static boolean rtxValid(String user, String sign) { String param = "user="+ user + "&sign=" + sign + ""; String result = sendPost("http://10.10.1.88:8012/SignAuth.cgi?"+param); //10.10.1.88 为RTX服务器地址 if("success!".equals(result)) return true; return false; }
接下来是一个函数----Java端向一个url发送消息并获得返回值, 返回值为success! 或者 fail! :
public static String sendPost(String targetUrl) { URL url; URLConnection con; StringBuffer sb=null; try { //向targetUrl发送请求 url = new URL(targetUrl); con=url.openConnection(); //读取响应 BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream())); sb=new StringBuffer(); String temp; while((temp=reader.readLine())!=null){ sb.append(temp); } } catch (IOException e) { e.printStackTrace(); } return sb.toString(); }
- Flex端调rtx接口实现自动登录
- ASP.NET页面打开RTX客户端并实现单点登录
- RTX反向登录
- WinXP实现自动登录
- 实现自动登录
- 实现自动登录Cookie
- expect实现自动登录
- JSP 实现自动登录
- 自动登录的实现
- 自动登录的实现
- 实现自动登录Cookie
- jsp实现自动登录
- Filter 实现自动登录
- cookie实现自动登录
- SharedPreferences实现自动登录
- 过滤器实现自动登录
- python实现自动登录
- 实现用户自动登录
- lr参数化——500户并发迭代1次 循环取5条数据
- Android 四种launchMode及疑问
- 模块
- ORA-23421: job number 25 is not a job in the job queue
- LR中错误代号为27796的一个解决方法
- Flex端调rtx接口实现自动登录
- NYOJ 150 Train Problem I STL栈
- 在PowerDesigner中设计物理模型
- 用存储过程查出引起死锁的进程和SQL语句
- 淘宝丁奇 解释 linux下库名表名是大小写敏感
- iOS开发之-NavigationBar NavigationItem
- 非常好听但比较难找的歌曲
- HDU 1181 变形课
- MySql优化