这里只大概讲一下使用到的 API 和登录时的一些要点,其他具体的细节还是需要自己看官方文档的。
前端 Flash 使用到的登录请求 API 是: (userName:String, password:String, zoneName:String, params: = null) userName 登录用户的名称。 password 登录密码。 zoneName 要登录的打听名称。 params 自定义参数。 这里说一下密码的用法。密码可以是用户自定义的密码,在 Flash 端登录大厅前让用户输入登陆密码,然后将密码以参数的形式发送到服务器端,由服务器端进行认证。密码也可以是 Flash 和服务器端共同定义好的一个公共密码,在 Flash 发出登录请求的时候,不需要用户输入登录密码,而是将之前定义好的统一的密码发送到服务器端,由服务器端统一进行登录认证。 服务器端的登录认证也是由特定的 API 负责的,这里简单的实例一下服务器端针对登录认证的处理代码片段。 public class LoginEventHandler extends BaseServerEventHandler { @Override public void handleServerEvent(ISFSEvent evt) throws SFSException { //取得登录用户名称 userName String userName = (String) evt.getParameter(SFSEventParam.LOGIN_NAME); //取得登录密码 password String password = (String) evt.getParameter(SFSEventParam.LOGIN_PASSWORD); //取得 Session ISession session = (ISession) evt.getParameter(SFSEventParam.SESSION); //取得登录请求响应数据 ISFSObject response = (ISFSObject) evt.getParameter(SFSEventParam.LOGIN_OUT_DATA); //进行登录认证 if ( true == getApi().checkSecurePassword(session, "密码", password ) { //将要返回给前端的数据装入 response.putBoolean( "success", true ); }else{ //抛出登录错误的异常 response.putBoolean( "success", false ); throw new SFSLoginException("passwd is not match"); } 这里需要说明的有三点。第一,通过 checkSecurePassword 进行登录认证时,第二个参数所填写的密码应与 Flash 传入的密码是一致的,在 Flash 调用 LoginRequest 时,第二个参数 password 加密后传给服务器端,所以服务器端得到的 password 是加密过的密码。 第二,登录成功后不需要向 Flash 发送数据,而是将要提供给 Flash 的数据都存入 response 变量,及 SFS 提供的 LOGIN_OUT_DATA,将所需的数据全部存入后,SFS 会自动返回这个对象给 Flash 端。 第三,当登录失败时,抛出 SFSLoginException 异常,SFS 也会自动将异常响应给 Flash 端,不需要单独向 Flash 端 Send 数据。 最后补充一下,Flash 端在响应登录成功回调的时候,从回调响应函数参数 evt:SFSEvent 中,由服务器端传递过来的数据都存在 data 节点,得到服务器端的数据方法是: evt.params.data.success;