QuickServer开发指南(4)- 添加认证
来源:互联网 发布:手机淘宝客源码 编辑:程序博客网 时间:2024/05/02 09:16
public void setAuthenticator(java.lang.String authenticator)
阅读文档可知此方法中的authenticator字符串是实现org.quickserver.net.server.Authenticator接口的方法的全名。
Authenticator接口有两个实现:
org.quickserver.net.server.QuickAuthenticator:这个类用来验证连接QuickServer的客户端。它只用一个实例处理所有的QuickServer验证。(推荐)
org.quickserver.net.server.ServerAuthenticator:这个类同样用来验证连接QuickServer的客户端,但对每一个验证的处理都会创建一个实例。
接下来给EchoServer加验证功能。简单点,客户端输入的用户名和密码一致就算验证通过。
首先,在同样的文件夹里创建一个验证类:EchoServerQuickAuthenticator
01 package echoserver;
02
03 import org.quickserver.net.server.*;
04 import java.io.*;
05
06 public class EchoServerQuickAuthenticator extends QuickAuthenticator {
07
08 public boolean askAuthorisation(ClientHandler clientHandler)
09 throws IOException {
10 String username = askStringInput(clientHandler, "User Name :");
11 String password = askStringInput(clientHandler, "Password :");
12
13 if(username==null || password ==null)
14 return false;
15
16 if(username.equals(password)) {
17 sendString(clientHandler, "Auth OK");
18 return true;
19 } else {
20 sendString(clientHandler, "Auth Failed");
21 return false;
22 }
23 }
24 }
接下来我们要告诉QuickServer使用我们新创建的验证类来做验证器。修改前一章创建的EchoServer.java文件,代码如下(粗体为修改的代码):
01 package echoserver;
02
03 import com.ddost.net.*;
04 import com.ddost.net.server.*;
05
06 import java.io.*;
07
08 public class EchoServer {
09
10 public static void main(String s[]) {
11
12 QuickServer myServer =
13 new QuickServer("echoserver.EchoCommandHandler");
14 myServer.setAuthenticator(
15 "echoserver.EchoServerQuickAuthenticator");
16 myServer.setPort(4123);
17 myServer.setName("EchoServer v 1.0");
18 try {
19 myServer.startServer();
20 } catch(AppException e){
21 System.err.println("Error in server : "+e);
22 }
23 }
24 }
OK,将修改好的文件编译,按照前一章讲述的方法运行程序。这次当我们点击"Connect"时,浏览器会要求我们输入用户名和密码。如果输入的用户名和密码一致就可以登录。如果输入错误五次以上,浏览器会提示"-ERR Max Auth Try Reached"并自动断开连接。这个次数和提示信息可以通过QuickServer类的setMaxAuthTry() 和 setMaxAuthTryMsg()修改。
有时在验证过程中我们可能需要中途退出而不是等待验证结束,这时输入"Quit"是不起作用的。我们可以这样修改代码,有两个方法:
一是从EchoServerQuickAuthenticator类中的askAuthorisation()方法抛出一个org.quickserver.net.AppException异常,代码如下:
String username = askStringInput(clientHandler, "User Name :");
if (username != null &&
username.equalsIgnoreCase("QUIT")) {
sendString(clientHandler, "Logged out.");
throw new AppException("Quit");
}
或者参考ClientHandler,关闭连接,代码如下:
String username = askStringInput(clientHandler, "User Name :");
if (username != null &&
username.equalsIgnoreCase("QUIT")) {
sendString(clientHandler, "Logged out.");
clientHandler.closeConnection();
return false;
}
ClientHandler对象能够提供很多客户端连接的有用信息,如IP地址。更多信息请参考API文档。
注意:
o 不要在验证器类中存贮任何客户端相关信息,如果需要,必须存放在ClientData类中--下一章将讲解该部分内容。
o 必须确认askAuthorisation()方法是线程安全的
原文地址 http://tb.blog.csdn.net/TrackBack.aspx?PostId=301457
- QuickServer开发指南(4)- 添加认证
- QuickServer开发指南(4)- 添加认证
- QuickServer开发指南(1)- 介绍
- QuickServer开发指南(2)- 安装
- QuickServer开发指南(3)- 构建EchoServer
- QuickServer开发指南(5)- 客户数据
- QuickServer开发指南(6)- 远程管理支持
- QuickServer开发指南(8)- XML配置
- QuickServer开发指南(1)- 介绍
- QuickServer开发指南(2)- 安装
- QuickServer开发指南(3)- 构建EchoServer
- QuickServer开发指南(5)- 客户数据
- QuickServer开发指南(6)- 远程管理支持
- QuickServer开发指南(8)- XML配置
- QuickServer开发指南目录
- QuickServer开发指南(7)- 使用和定制日志
- QuickServer开发指南(9)- 数据模式和数据类型
- QuickServer开发指南(7)- 使用和定制日志
- QuickServer开发指南(3)- 构建EchoServer
- ASP.NET中利用存储过程实现模糊查询
- java中Sting、Int之间的相互转换方法
- Delphi2007出来了,感受一下!
- 解析__cdecl,__fastcall, __stdcall 的不同
- QuickServer开发指南(4)- 添加认证
- MIME
- asp.net调用存储过程类
- CSS 滤镜应用集锦 -- 巧用CSS的 RevealTrans 滤镜
- Windows服务的创建
- QuickServer开发指南(5)- 客户数据
- 和SIP有关的RFC
- Remove Groupby columns(UltraGridColumn)
- com组件的一些概念