TDSTCPServerTransport 的Filters
TDSTCPServerTransport 的Filters
TDSTCPServerTransport 的 Filter 属性,可以对传递的数据进行加密,压缩,再修改等,有
点注入的概念。默认情况下,Datasnap 自带的ZLIB, PC1,RSA 三个Filter。测试了一下,
RSA 只对KEY 加密,PC1 才对内容加密,ZLIB 来做压缩,ZLIB 压缩实在不咋的。并且,
Filter 的顺序,是依次执行的。我现在打算实现,服务器的一个Log 功能,记录下来进入的
数据,出去的数据,要求记录下来的数据是明文。
TTransportFilter 的 ProcessInput ,ProcessOutput 光看名字比较费解,可以这么理解
ProcessInput 为编码,ProcessOutput 可以理解为解码。
首先给DSTCPServerTransport1 的Fitlers 都加上默认的3 个Filter。
上一个完整的代码
unituLogFilter;
interface
uses
SysUtils, DBXPlatform, DBXTransport;
type
TLogHeadFilter =class(TTransportFilter)
public
constructorCreate;override;
destructorDestroy;override;
functionProcessInput(constData: TBytes): TBytes;override;
functionProcessOutput(constData: TBytes): TBytes;override;//do nothing
functionId: UnicodeString;override;
end;
TLogTailFilter =class(TTransportFilter)
public
constructorCreate;override;
destructorDestroy;override;
functionProcessInput(constData: TBytes): TBytes;override;//do nothing
functionProcessOutput(constData: TBytes): TBytes;override;
functionId: UnicodeString;override;
end;
procedureAddLogFilter(Filters: TTransportFilterCollection);
implementation
uses
CodeSiteLogging;
const
LogFilterName_Tail ='LogTail';
LogFilterName_Head ='LogHead';
procedureAddLogFilter(Filters: TTransportFilterCollection);
var
fs: TDBXStringArray;
i:Integer;
begin
fs := Filters.FilterIdList;
Filters.Clear;
Filters.AddFilter(LogFilterName_Head);
fori := Low(fs)toHigh(fs)do
begin
Filters.AddFilter(fs[i]);
end;
Filters.AddFilter(LogFilterName_Tail);
end;
constructorTLogTailFilter.Create;
begin
inheritedCreate;
//CodeSite.Send(csmBlue, 'TLogTailFilter.Create');
end;
destructorTLogTailFilter.Destroy;
begin
//CodeSite.Send(csmBlue, 'TLogTailFilter.Destroy');
inheritedDestroy;
end;
functionTLogTailFilter.ProcessInput(constData: TBytes): TBytes;
begin
Result := Data;
CodeSite.Send(csmOrange,'To Client: '+ IntToStr(Length(Data)));
end;
functionTLogTailFilter.ProcessOutput(constData: TBytes): TBytes;
begin
Result := Data;
CodeSite.Send(csmOrange,'From Client: '+ IntToStr(Length(Data)),
TEncoding.ASCII.GetString(Data));
end;
functionTLogTailFilter.Id: UnicodeString;
begin
Result := LogFilterName_Tail;
end;
{ TLogInputFilter }
constructorTLogHeadFilter.Create;
begin
inherited;
//CodeSite.Send(csmBlue, 'TLogHeadFilter.Create');
end;
destructorTLogHeadFilter.Destroy;
begin
//CodeSite.Send(csmBlue, 'TLogHeadFilter.Destroy');
inherited;
end;
functionTLogHeadFilter.Id: UnicodeString;
begin
Result := LogFilterName_Head;
end;
functionTLogHeadFilter.ProcessInput(constData: TBytes): TBytes;
begin
Result := Data;
CodeSite.Send(csmYellow,'To Client: '+ IntToStr(Length(Data)),
TEncoding.ASCII.GetString(Data));
end;
functionTLogHeadFilter.ProcessOutput(constData: TBytes): TBytes;
begin
Result := Data;
CodeSite.Send(csmYellow,'From Client: '+ IntToStr(Length(Data)));
TDSTCPServerTransport 的Filters的更多相关文章
- datasnap的初步
datasnap的初步-回调函数 服务器端 TServerMethods1 =class(TComponent) private { Private declarations } public { P ...
- DATASNAP压缩过滤器的使用
ZLIBCOMPRESSION FILTER 作为范例,我们使用已随D2010提供的DataSnap过滤器.可用于在客户端和服务端压缩数据流.这里说的ZlibCompression过滤器可以在DbxC ...
- ABP(现代ASP.NET样板开发框架)系列之13、ABP领域层——数据过滤器(Data filters)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之13.ABP领域层——数据过滤器(Data filters) ABP是“ASP.NET Boilerplate P ...
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】
过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响应内容,只响应特定内容给那些有特定权限的用户,过滤器理论上有以下功能: 判断 ...
- correlation filters in object tracking
http://www.cnblogs.com/hanhuili/p/4266990.html Correlation Filter in Visual Tracking系列一:Visual Objec ...
- MongoDB JAVA API Filters
Filters 该过滤器类为所有的MongoDB的查询操作静态工厂方法.每个方法返回BSON类型,又可以传递给期望一个查询过滤器的任何方法的一个实例. eq:匹配等于指定值的值.gt:匹配大于指定值的 ...
- Android开发之旅: Intents和Intent Filters(理论部分)
引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...
- >>> FilterDispatcher <<< is deprecated! Please use the new filters!
在struts2.3.20下,web.xml中使用 会出现*********************************************************************** ...
- Correlation Filter in Visual Tracking系列一:Visual Object Tracking using Adaptive Correlation Filters 论文笔记
Visual Object Tracking using Adaptive Correlation Filters 一文发表于2010的CVPR上,是笔者所知的第一篇将correlation filt ...
随机推荐
- 清除WebSphere部署应用所对应的JSP缓存
Web应用部署在WebSphere Application Server v8.5后程序一般放置在<AppServer>/profiles/<profile_name>/ins ...
- 从实际案例聊聊Java应用的GC优化--转
https://tech.meituan.com/jvm_optimize.html 当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化 ...
- msxml3.dll 错误 '800c0005' 系统错误: -2146697211。
asp网站 因为这个问题,困扰自己好多次,还重装过两次服务器系统,非常的麻烦,这次终于找到了问题所在,记录下来,方便以后查看. 服务器症状: 1.服务器上的IE浏览器不能访问外网: 2.set htt ...
- Android基础TOP7_1:ListView制作列表
结构: Activity: activity_main: <RelativeLayout xmlns:android="http://schemas.android.com/apk/r ...
- windows server 2008 如何查看异常重启日志
下面蓝队网络为大家介绍下windows server 2008 如何查看异常重启日志 开始->管理工具->时间查看器 windows日志->系统 筛选当前日志 选择Kernel-Po ...
- 【译】x86程序员手册28-7.7任务地址空间
7.7 Task Address Space 任务地址空间 The LDT selector and PDBR fields of the TSS give software systems desi ...
- FPGA编程技巧系列之输入输出偏移约束详解
1. 偏移约束的作用 偏移约束(Offset Constraint)用来定义一个外部时钟引脚(Pad)和数据输入输出引脚之间的时序关系,这种时序关系也被称为器件上的Pad-to-Setup或Clo ...
- Python+selenium学习(二) selenium 定位不到元素
转载:https://www.cnblogs.com/tarrying/p/9681991.html tarrying selenium的三种等待时间 //隐式等待(20秒以内没哥一段时间就会去找元素 ...
- Hive DDL&DML
1.删除分区 ALTER TABLE table_name DROP IF EXISTS PARTITION(dt=') 如果是外部表,记得rm对应文件 2.添加分区 ALTER TABLE tabl ...
- 并发和多线程(二)--线程安全、synchronized、CAS简介
线程安全性: 当多个线程访问一个类的时候,这个类始终表示出正确的行为,那么这个类是线程安全的. 无状态的对象一定是线程安全的,例如大部分service.dao.Servlet都是无状态的. 线程安全体 ...