产品安装文档

Similar documents
新・解きながら学ぶJava

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

Microsoft Word - 01.DOC

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

EJB-Programming-4-cn.doc

EJB-Programming-3.PDF

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

无类继承.key

untitled

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

Chapter 9: Objects and Classes

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

Java

JBuilder Weblogic

拦截器(Interceptor)的学习

untitled

chp6.ppt

Microsoft Word - ch04三校.doc

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

《大话设计模式》第一章

untitled

建模与图形思考

FileMaker 15 ODBC 和 JDBC 指南

JavaIO.PDF

Microsoft Word - 第3章.doc

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

FileMaker 16 ODBC 和 JDBC 指南

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

PowerPoint 演示文稿

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

untitled

"+handlermethod.getbean().getclass().getname()); public void aftercompletion(httpservletrequest req, HttpServletResponse resp, Object handler, Excepti

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

软件工程文档编制

untitled

IoC容器和Dependency Injection模式.doc

untitled

Guava学习之Resources

使用Cassandra和Spark 2.0实现Rest API服务

使用MapReduce读取XML文件

javaexample-02.pdf

手说TTS开发指南

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民


基于ECO的UML模型驱动的数据库应用开发1.doc

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

Microsoft PowerPoint - plan08.ppt

Flume-ng与Mysql整合开发

2 职 业 核 心 知 识 ( 66 学 分 ) 经 营 环 境 分 析 财 务 管 理 实 务 管 理 学 基 础 统 计 学 基 础 初 级 会 计 中 级 会 计 企 业 制 度 设 计 出 纳 实 务 审 计 基 础 与 实 务 职 业 资 格 培 训 ( 第 三 五 学 期 ) 0 7.5

ebook140-9

新版 明解C++入門編

ASP.NET实现下拉框二级联动组件

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Hive:用Java代码通过JDBC连接Hiveserver

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f

1. 访 问 最 新 发 行 公 告 信 息 jconnect for JDBC 访 问 最 新 发 行 公 告 信 息 最 新 版 本 的 发 行 公 告 可 以 从 网 上 获 得 若 要 查 找 在 本 产 品 发 布 后 增 加 的 重 要 产 品 或 文 档 信 息, 请 访

FY.DOC

untitled

ebook 86-15

untitled

全国计算机技术与软件专业技术资格(水平)考试

Chapter 9: Objects and Classes

提问袁小兵:

untitled

RunPC2_.doc

untitled

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

建模与图形思考

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

untitled

untitled

建立Android新專案

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

4.1 AMI MQSeries API AMI MQI AMI / / AMI JavaC C++ AMI / AMI AMI - / /

1.5招募说明书(草案)

设计模式 Design Patterns

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

Microsoft PowerPoint - 数据通信-ch1.ppt

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

基于CDIO一体化理念的课程教学大纲设计

untitled

Microsoft Word - Learn Objective-C.doc

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

ebook140-8

<4D F736F F D20D0C5CFA2BBAFB7A2D5B9D6D8B5E3D7A8CFEEB9E6BBAE2E646F63>

Transcription:

PRIMETON INFORMATION TECHNOLOGIES, INC. 普元信息技术股份有限公司 Primeton ESB6.6 程序员手册 - 拦截器开发手册 普元公司对包括但不限于提供的产品或服务的全部内容及本材料拥有版权等知识产权, 受法律保 护 未经本公司书面许可, 任何单位及个人不得以任何方式或理由对上述产品 服务 信息 材 料的任何部分进行使用 复制 修改 抄录 传播或与其它产品捆绑使用 销售 Copyright 2003-2017 普元信息技术股份有限公司版权所有

目录 第 1 章简介...3 1.1 拦截器介绍...3 1.2 拦截器开发目录介绍...4 第 2 章拦截器开发...6 2.1 拦截器开发 ( 黑名单拦截器开发为例 )...6 2.1.1 拦截器开发 ( 黑名单拦截器 )...6 2.1.2 拦截器策略数据...7 2.1.3 拦截器 RuntimeHandler...8 2.2 策略数据初始化... 9 2.2.1 命名变量接口...9 2.2.2 策略数据加载...9 2.2.3 PolicyDataHander 类...11 2.2.4 策略工厂...13 2.3 JMX 服务数据同步处理...15 第 3 章拦截器配置... 16 3.1 Server 启动配置...16 3.2 配置文件 esb_interception.xml...17 3.3 配置文件 hander_startup.xml...17 3.4 配置文件 config esb-jdbc.properties...18 3.5 把拦截器 jar 包导入 server...19 第 4 章拦截器测试... 20 4.1 黑名单拦截器实例展示...20 第 5 章附录... 23

第 1 章 简介 1.1 拦截器介绍 本文以黑名单拦截为例, 说明如何开发符合客户需求的拦截器 拦截器接口为 IInterceptor4Service<Message<?>, ITransport<T>>, 用户开发拦截器必须实现这个接口, 在这个接口的 beforehandle(msg message, CTX contex t),afterhandle(msg message, CTX context) 加入对拦截器的要求, 例如 : 该拦截器需要落日志, 对文件进行操作, 对数据库进行操作等等 拦截器接口 IInterceptor4Service 说明 : open() close() isopen() beforehandle(message<?> message, 方法打开拦截器方法关闭拦截器方法标识拦截器是否打开方法是在该服务的消息进行转换前调用 ITransport<T> transport) afterhandle(message<?> message, IT 方法是在该服务的消息进行转换后调用 ransport<t> context) 代码 : public class IpBlackListControlInterceptor <T> implements ice<message<?>, ITransport<T>>{ IInterceptor4Serv protected final static ILogger logger = LoggerFactory.getInstance().getLogger(IpBl acklistcontrolinterceptor.class); public int beforehandle(message<?> message, ITransport<T> transport) { return CONTINUE; public int afterhandle(message<?> message, ITransport<T> context) { 第 3 页共 23 页

return 0; public boolean isopen() { return true; public void open() { public void close() { 1.2 拦截器开发目录介绍 com.primeton.esb.governance.interceptor.blackip 包是关于黑名单拦截器的 com.primeton.esb.governance.testinterceptor.common 包是关于拦截器类型变量定义接口 根据拦截器类型获取拦截器对象和重加载策略数据 加载策略数据 拦截器的策略工厂 第 4 页共 23 页

com.primeton.esb.governance.interceptor.policy.data 包是拦截器策略数据加载 com.primeton.esb.governance.interceptor.policy.runtimehandler 包是策略数据对外的接口 第 5 页共 23 页

第 2 章 拦截器开发 2.1 拦截器开发 ( 黑名单拦截器开发为例 ) 当用户访问 esb 部署的服务时, 拦截器可以在 Transport 代理服务 业务服务进行请求 响应 异常信息的拦截, 可以拦截协议头 消息体等信息, 进行业务处理 2.1.1 拦截器开发 ( 黑名单拦截器 ) 返回 CONTINUE, 则表示请求通过拦截器, 进入下个业务逻辑 ;BLOCK 表示 驳回请求 6

返回请求失败的响应消息 注 : 1. 黑名单拦截器应在服务消息进行转换前调用, 相关代码应写入 beforehandle (){ 2. 从消息中提取访问者 ip, 利用 BlackIpTestListControlPolicyRuntimeHandl er 的 exists() 方法判断该访问者是否需要拦截 如果该 IP 在黑名单中, 调用 send RejectMessage() 方法返回 error 消息 2.1.2 拦截器策略数据 黑名单拦截器策略数据定义代码 : public class BlackIpTestListControlPolicyData { private List<String> ipblacklist = new ArrayList<String>(); public List<String> getipblacklist() { return ipblacklist; public void setipblacklist(list<string> ipblacklist) { this.ipblacklist = ipblacklist; 第 7 页共 23 页

public boolean exists(string ip) { return ipblacklist.contains(ip); 注 : 1.BlackIpTestListControlPolicyData 类是黑名单策略数据的模型, 它会在 se rver 启动后初始化里面的数据, 在策略工厂里 BlackIpTestListControlPolicyDat a 对象中 ipblacklist 是有值的,ipBlackList 存放黑名单中的 ip 2.Exists() 方法判断参数中的 ip 是否存在于黑名单中 2.1.3 拦截器 RuntimeHandler RuntimeHandler 类主要提供了拦截器使用策略数据的接口 BlackIpTestListControlPolicyRuntimeHandler 类代码 : public class BlackIpTestListControlPolicyRuntimeHandler mehandler{ implements IPolicyRunti public Object getoperationpolicy(object obj) { BlackIpTestListControlPolicyData blackiptestlistcontrolpolicydata =Intercepto rtestpolicymanagefactory. getinstance().getblackiptestlistcontrolpolicydata(); String clientid = (String) obj; return blackiptestlistcontrolpolicydata.exists(clientid); 注 :BlackIpTestListControlPolicyRuntimeHandler 类实现了 com.primeton.e sb.governance.service.policy.manage 包的 IPolicyRuntimeHandler 接口, 重写 g etoperationpolicy() 方法 实现了判断访问者 IP 是否在黑名单中的功能, 它相当于一个操作黑名单策略数据模型的接口 第 8 页共 23 页

2.2 策略数据初始化 2.2.1 命名变量接口 接口 IInterceptorPolicyConstants: public interface IInterceptorPolicyConstants extends IPolicyConstants{ // 访问黑名单控制策略 public static String BIT_POLICY_TYPE="bit"; // 访问用户名密码验证控制策略 public static String ULT_POLICY_TYPE = "ult"; 注 : 定义了黑名单拦截器类型和服务访问控制拦截器类型, 该类继承了 IPolic yconstants 类, 定义的类型, 在 governer 前端业务逻辑根据类型调用拦截器会用到 2.2.2 策略数据加载 InterceptorPolicyDataInit 类 : 该类继承 com.primeton.esb.governance.service.policy.manage.impl 包中的 DefaultPolicyDataInit 类, 重写了 loadpolicydata() 方法 public void loadpolicydata() { super.loadpolicydata(); loadblackiplist(); loaduserpassword(); 注 : 这个扩展的子类 loadpolicydata() 方法来加载所有自定义拦截器的策略数 据, 该类会在 server 启动时调用, 初始化策略工厂里所有对象的数据 第 9 页共 23 页

public void loadblackiplist(){ List<String> ipblacklist = InterceptorTestPolicyManageFactory.getInstance().g etblackiptestlistcontrolpolicyd ata().getipblacklist(); Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DBConnectionManager.getInstance().getConnetion(); if (conn!= null) { String sql = "select app_ip from SAM_APPSYSTEM_BLACK_IP "; stmt = conn.preparestatement(sql); rs = stmt.executequery(); List<String> tmpipblacklist = new ArrayList<String>(); while (rs.next()) { tmpipblacklist.add(rs.getstring(1)); synchronized (ipblacklist) { ipblacklist.clear(); ipblacklist.addall(tmpipblacklist); catch (SQLException e) { logger.error(e); finally { DBConnectionManager.getInstance().close(rs); DBConnectionManager.getInstance().close(stmt); 第 10 页共 23 页

DBConnectionManager.getInstance().close(conn); 注 :loadblackiplist() 方法实现 : 把数据库 sam_appsystem_black_ip 表中的 i p 存放到工厂里的 blackiptestlistcontrolpolicydata 对象中, 实现了策略数据初始化 2.2.3 PolicyDataHander 类 InterceptorPolicyDataHandler 类 : 当 governer 对数据进行更新时, 数据库的数据会发生改变 但是策略数据在 server 启动时初始化的, 为了数据的同步, 通过 jms 消息通知 server 进行策略数据同步 该类继承 com.primeton.esb.governance.service.policy.manage.impl 包 Def aultpolicydatahandler 类, 重写了 getpolicydata() 和 notifypolicyupdate() 方法 public class InterceptorPolicyDataHandler extends DefaultPolicyDataHandler{ @SuppressWarnings("unchecked") @Override public <T> T getpolicydata(string policytype) { TYPE)) if (policytype.equalsignorecase(iinterceptorpolicyconstants.bit_policy_ return (T) InterceptorTestPolicyManageFactory.getInstance().getUser LoginTestControlPolicyData(); TYPE)) if (policytype.equalsignorecase(iinterceptorpolicyconstants.ult_policy_ return (T) InterceptorTestPolicyManageFactory.getInstance().getBlack IpTestListControlPolicyData(); else 第 11 页共 23 页

return null; ; @Override public void notifypolicyupdate(string policytype) { super.notifypolicyupdate(policytype); if (policytype.equalsignorecase(iinterceptorpolicyconstants.bit_policy_ TYPE)) { ydatainit() InterceptorTestPolicyManageFactory.getInstance().getInterceptorPolic.loadBlackIPList(); ainit() InterceptorTestPolicyManageFactory.getInstance().getDefaultPolicyDat.loadServiceIDData(); YPE)){ ainit() if(policytype.equalsignorecase(iinterceptorpolicyconstants.ult_policy_t InterceptorTestPolicyManageFactory.getInstance().getInterceptorPolicyDat.loadUserPassword(); ainit() InterceptorTestPolicyManageFactory.getInstance().getDefaultPolicyDat.loadServiceIDData(); 注 : 1.getPolicyData() 方法依赖策略类型获得策略数据对象 第 12 页共 23 页

2.notifyPolicyUpdate() 方法 : 通过 JMX 服务,client 端调用 server 端的 not ifypolicyupdate() 方法, 实现拦截器策略数据实时更新 2.2.4 策略工厂 InterceptorTestPolicyManageFactory 类 : 该类继承了 com.primeton.esb.governance.service.policy.factory 包的 Pol icymanagefactory 类, 对父类的扩展, 自定义的拦截器都可以加进去, 当 server 启动, 调用该类对象进行初始化操作 声明了所有关于拦截器的对象 public class InterceptorTestPolicyManageFactory extends ory{ PolicyManageFact public InterceptorTestPolicyManageFactory() { private static InterceptorTestPolicyManageFactory interceptorpolicyman agefactory = new InterceptorTestPolicyManageFactory(); public static InterceptorTestPolicyManageFactory getinstance() { return interceptorpolicymanagefactory; BlackIpTestListControlPolicyRuntimeHandler blackiptestlistcontrolpolicy RuntimeHandler = null; l; BlackIpTestListControlPolicyData blackiptestlistcontrolpolicydata = nul InterceptorPolicyDataInit interceptorpolicydatainit = null; UserLoginTestControlPolicyRuntimeHandler userlogintestcontrolpolicyr 第 13 页共 23 页

untimehandle = null; UserLoginTestControlPolicyData userlogintestcontrolpolicydata = null; 注 : 声明了所有对象, 创建调用工厂对象的方法 public void initsystem() { this.createobjectinstanceall(); super.getinstance().initsystem(); interceptorpolicydatainit.loadpolicydata(); 注 :initsystem() 方法先调用 createobjectinstanceall() 方法创建所 有对象, 调用 loadpolicydata() 方法初始化策略数据, 然后调用父类的 in itsystem 开启父类的自动更新策略数据 public void createobjectinstanceall() { InterceptorPolicyDataInit = new InterceptorPolicyDataInit(); blackiptestlistcontrolpolicyruntimehandler = new BlackIpTestListCo ntrolpolicyruntimehandler(); userlogintestcontrolpolicyruntimehandle = new UserLoginTestContr olpolicyruntimehandler(); ata(); a(); blackiptestlistcontrolpolicydata = new BlackIpTestListControlPolicyD userlogintestcontrolpolicydata = new UserLoginTestControlPolicyDat ; 注 :createobjectinstanceall() 方法创建所有声明对象的实例 public BlackIpTestListControlPolicyRuntimeHandler getblackiptestlistco ntrolpolicyruntimehandler() { 第 14 页共 23 页

return blackiptestlistcontrolpolicyruntimehandler; public BlackIpTestListControlPolicyData getblackiptestlistcontrolpolicyd ata() { return blackiptestlistcontrolpolicydata; public InterceptorPolicyDataInit getinterceptorpolicydatainit() { return interceptorpolicydatainit; public UserLoginTestControlPolicyRuntimeHandler getuserlogintestcont rolpolicyruntimehandle() { return userlogintestcontrolpolicyruntimehandle; public UserLoginTestControlPolicyData getuserlogintestcontrolpolicyda ta() { return userlogintestcontrolpolicydata; 注 : 后面是所有声明对象的 get 方法 2.3 JMX 服务数据同步处理 数据同步指的是 : 当 governer 对数据进行更新, 数据库的数据已经改变, 但是策略数据是 server 启动时初始化的, 为了数据的同步, 通过 jmx 消息通知 server 进行策略数据同步处理 com.primeton.esb.governance.service.runtime.jmx 包中的 JMXService 类 第 15 页共 23 页

当注册 Policy Data MBean 时,PolicyDataHandler 类 notifypolicyupdat e 方法应调用刚创建的子类 InterceptorPolicyDataHandler 的 notifypolicyup date 方法, 这样做自定义的拦截器策略数据才会更新 ( 下图 ): 第 3 章 拦截器配置 3.1 Server 启动配置 com.primeton.esb.governance.service.startup 包中的 ESBExtStartup 类 需要对策略启动类进行扩展, 把开发的拦截器加进去, 需要调用策略工厂对象来初始化策略数据 Start() 中策略数据初始化是应该调用刚创建的 InterceptorTestPolicyManage Factory 工厂类的 inisystem() 方法 第 16 页共 23 页

3.2 配置文件 esb_interception.xml 拦截器配置文件目录 server/eos/_srv/config/esb_interception.xml 3.3 配置文件 hander_startup.xml 目录 :\server\eos\_srv\config\system\hander_startup.xml 第 17 页共 23 页

打开启动加载数据库相关策略的配置 3.4 配置文件 config esb-jdbc.properties 目录 : esb_server\server\eos\_srv\config esb-jdbc.properties Esb 数据库配置 : 第 18 页共 23 页

3.5 把拦截器 jar 包导入 server 导出黑名单 IP 拦截器 : com.primeton.esb.governance.interceptor.ext.jar 将 jar 包粘贴到 [Server 安装目录 ]\server\plugins 目录下 第 19 页共 23 页

第 4 章 拦截器测试 4.1 黑名单拦截器实例展示 进入黑名单 IP 认证及配置 功能 前提 : 已创建好部署了服务的系统 需要拦截的访问系统 : 系统编码 com.primeton.esb.privider.custsystem 本地的 server IP 地址 : 127.0.0.1 访问我部署的 ws 代理服务的 u rl: http://127.0.0.1:9090/com.primeton.esb.provi der.custsystem.custmgrservice 在 Header 中配置 ClientId 访 问系统编码 : com.primeton.esb.provider.custsystem( 这是必 须配置的, 用来被拦截器识别系统 ) 访问结果 : 被黑名单拦截器拦截, 返回 error 信息 6

注 : 删除了本地 ip, 再次访问 : 第 21 页共 23 页

黑名单拦截器执行完成 ; 第 22 页共 23 页

第 5 章 附录 内附 PolicyDataHandler 和 ESBExtStartup 类代码 : 拦截器开发实例.rar 6