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();    }



 



 

原创粉丝点击