osgi cxf_所有OSGi套件的通用CXF请求拦截器

osgi cxf

几个月以来,我一直在研究Apache CXF,Karaf和Felix,我发现所有这些捆绑技术都非常有趣。 在处理一些用例时,我陷入一种情况,即我只需要一个Interceptor即可在发送到Karaf应用程序下部署的任何捆绑包的每个HTTP请求上执行。

基本上,我想对每个请求进行授权,更改一些标头,并对发送到系统的任何请求进行一些安全检查,最重要的是,我想在一个类中进行处理。 我发现了在每个捆绑中添加拦截器的许多方法,但我想在某个集中的位置/捆绑中进行操作,以便可以从该捆绑中处理所有请求。 执行某些授权后,它可以简单地拒绝任何请求,也可以将其传递给相关的包(cxf在内部执行)。

在这样做的时候,我知道CXF总是为每个在捆绑软件蓝图中初始化的RestServer创建一个单独的BUS。 但是要实现我的目标,我们必须在同一总线上注册所有捆绑包,并将拦截器应用于该总线。 这样我们就可以控制总线上所有的请求。

通用拦截器

public class CommonInterceptor extends AbstractPhaseInterceptor {public CommonInterceptor() {super(Phase.PRE_PROTOCOL);}public void handleMessage(Message message) throws Fault {/*** Here write whatever logic you want to implement on each HTTP call sent to your project.* * This interceptor will be called on every request that is being recieved by container and then will be sent* to the relevant bundle/class for handling.*/String url = ( String ) message.get( URL_KEY_ );String method = ( String ) message.get( Message.HTTP_REQUEST_METHOD );LOGGER.debug( "################### Authentication Interceptor Validating Request : " + url + "####################" );Map< String, List< String >> headers = Headers.getSetProtocolHeaders( message );if ( headers.containsKey( X_AUTH_TOKEN ) ) {return;}else{message.getInterceptorChain().abort();}}
}

上面是常见的拦截器代码,您可以在其中使用正在发送到服务器的请求来执行任何操作。 在构造函数中,我正在分配将拦截器连接到的阶段。 CXF有多个阶段。 您可以获取有关“阶段”链接的信息: CXF中的“阶段”。

扩展AbstractFeature:

public class InterceptorManager extends AbstractFeature {private static final String COMMON_BUS_NAME = "javapitshop_bus";private static final Logger LOGGER = LoggerFactory.getLogger(InterceptorManager.class);private static final Interceptor< Message > COMMON_INTERCEPTOR = new CommonInterceptor();protected void initializeProvider(InterceptorProvider provider, Bus bus) {if ( COMMON_BUS_NAME.equals( bus.getId() ) ) {LOGGER.debug( " ############## Registering Common Interceptor on BUS ##############" );bus.getInInterceptors().add( COMMON_INTERCEPTOR );} else {LOGGER.error( " ############## Bus Id: '" + bus.getId() + "' doesn't matched with system bus id ##############" );}	}
}

在上面的代码中,我正在扩展AbstractFeature类,并连接initilizeProvider方法。 然后我给我们的普通巴士起了个名字。 基本上,只要安装了任何OSGi捆绑软件,它都会在总线上进行注册。 在这种情况下,我们要检查捆绑包是否具有所需的总线ID。 该总线ID在整个系统范围内都是唯一的,具有此总线ID的所有捆绑包都将注册到同一总线,并且与这些捆绑包相关的每个请求都将首先发送到CommonInterceptor。

捆绑包中的公交注册:

<cxf:bus id="javapitshop_bus"><cxf:features><cxf:logging /></cxf:features></cxf:bus>

要在同一总线上注册捆绑包,您必须给该总线分配一个ID并将其注册在捆绑包的blueprint.xml文件中。 在所有相关的捆绑软件中执行此操作,所有这些捆绑软件都将分配有相同的总线,并且CommonInterceptor将自动实现到所有捆绑软件。

  • 您可以从我的Github下载完整的源代码。

翻译自: https://www.javacodegeeks.com/2014/11/a-common-cxf-request-interceptor-for-all-osgi-bundles.html

osgi cxf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

听说,高手都用记事本写C语言代码?

坊间传闻高手都喜欢用记事本写代码&#xff0c;那么问题来了&#xff0c;我们以C语言为例&#xff0c;如何用记事本编译运行呢&#xff1f;其实&#xff0c;最简单的方式就是安装GCC编译器&#xff0c;在记事本编写C语言程序&#xff0c;然后再在命令行用GCC编译运行。下面&…

精简指令和复杂指令计算机,CPU精简指令集和复杂指令集的区别

经常看到计算机课程上介绍PowerPC是采用精简指令集的CPU&#xff0c;酷睿CPU是复杂指令集。那么到底精简指令集和复杂指令集有什么区别呢&#xff1f;以下内容摘自百度百科&#xff1a;在计算机指令系统的优化发展过程中&#xff0c;出现过两个截然不同的优化方向&#xff1a;C…

均值差异大但是t检验不显著_T检验原理及介绍

T检验原理及应用介绍一、T检验的应用场景&#xff1a;应用场景&#xff1a;可以用于研究工艺更改前后对于产品质量是否有显著提高&#xff1b;研究不同的热处理温度对于产品性能&#xff0c;晶粒度等是否有明显效果&#xff1b;研究不同的设备或人员对于产品质量的影响是否有差…

javafx ui_调用以验证JavaFX UI的响应能力

javafx ui最近&#xff0c;吉姆韦弗&#xff08;Jim Weaver&#xff09;在他的Surface Pro上安装了我的小图片索引应用“ picmodo”作为演示&#xff0c;图形用户界面&#xff08;GUI&#xff09;变成了垃圾。 显然&#xff0c;Windows Tablet上JavaFX的基本字体大小很高&…

python中mean的用法_Python statistics mean()用法及代码示例

先决条件&#xff1a;统计函数简介 在数据分析和统计方面&#xff0c;Python是一种非常流行的语言。幸运的是&#xff0c;Python3提供了statistics模块&#xff0c;它具有非常有用的功能&#xff0c;例如mean()&#xff0c;median()&#xff0c;mode()等等 mean()函数可用于计算…

C语言多文件编程基本格式

1、背景&#xff1a;用一个丢骰子的简单案例熟悉了C语言多文件编程该咋写2、格式&#xff08;1&#xff09;主函数文件main.c//文件头part1:所有要使用的函数#include ;#include ;#include ;//文件头part2:放所有函数原型的文件#inlucde "main.h"//文件头part3&#…

微软project服务器搭建,Project Professional 版本(Project Server 2010 设置)

Project Professional 版本利用“Project Professional 版本”&#xff0c;您可以指定将能够连接到 Project Server 2010 环境的 Project Professional 客户端的版本(内部版本号)。可通过此设置确保与服务器的 Project Professional 客户端连接都处于所需的基本级别。例如&…

众辰nz200变频器使用说明书_ABB变频器

ABB变频器&#xff0c;广州丰电自动化设备有限公司是一家专业从事工业计算机、工业自动化产品、电线电缆、仪器仪表销售、安装、维修&#xff1b;变频控制系统、变频恒压供水系统、变频节能系统的设计及安装&#xff0c;提供自动化工程技术服务及成套解决方案于一体的科技企业。…

pb 执行存储过程带参数_PB级海量数据服务平台架构设计实践

基于PB级海量数据实现数据服务平台&#xff0c;需要从各个不同的角度去权衡&#xff0c;主要包括实践背景、技术选型、架构设计&#xff0c;我们基于这三个方面进行了架构实践&#xff0c;下面分别从这三个方面进行详细分析讨论&#xff1a;实践背景该数据服务平台架构设计之初…

4g的服务器mysql配置文件,服务器物理内存16G mysql数据库my.cnf配置及参数说明

搜索热词《服务器物理内存16G MysqL数据库my.cnf配置及参数说明》要点&#xff1a;本文介绍了服务器物理内存16G MysqL数据库my.cnf配置及参数说明&#xff0c;希望对您有用。如果有疑问&#xff0c;可以联系我们。导读&#xff1a;服务器物理内存16G MysqL数据库my.cnf配置及参…

C语言*运算符和运算符

取址运算符&用来取得其操作数的地址。如果操作数 x 的类型为 T&#xff0c;则表达式 &x 的类型是 T 类型指针&#xff08;指向 T 的指针&#xff09;。取址运算符的操作数必须是在内存中可寻址到的地址。换句话说&#xff0c;该运算符只能用于函数或对象&#xff08;例…

mockito 单元测试_使用FizzBu​​zz和Mockito进行单元测试

mockito 单元测试我有时使用FizzBu​​zz向新手演示单元测试的基础。 尽管FizzBu​​zz确实是一个简单的问题&#xff0c;但它也可以用于演示更高级的单元测试技术&#xff0c;例如模拟 。 FizzBu​​zz Kata&#xff1a; “ 编写一个程序&#xff0c;打印一个从1到100的数字…

css 竖行进度图_前端学习--汇集了大量 CSS 的使用和学习的示例代码

CSS-Inspiration这里可以让你寻找到使用或者是学习 CSS 的灵感&#xff0c;以分类的形式&#xff0c;展示不同 CSS 属性或者不同的课题使用 CSS 来解决的各种方法。目前已有上百种的CSS 实现示例&#xff0c;代码可以拿 来即用LayoutCSS实现瀑布流布局(display: flex)CSS实现瀑…

socket io 不使用redis_Redis这么快,线程模型竟然是单线程

Redis的线程模型记住一句话&#xff1a;单进程单线程&#xff0c;IO多路复用。单线程还这么快&#xff1f;是的&#xff0c;你没有看错&#xff0c;Redis是单线程处理的。这是因为Redis的设计者认为Redis是基于内存的操作&#xff0c;瓶颈在内存或者网络带宽而不是CPU。这样&am…

java 统一处理时区_Java时区处理初学者指南

java 统一处理时区基本时间观念 大多数Web应用程序必须支持不同的时区&#xff0c;而正确处理时区绝非易事。 更糟糕的是&#xff0c;您必须确保各种编程语言&#xff08;例如&#xff0c;前端JavaScript&#xff0c;中间件中的Java和作为数据存储库的MongoDB&#xff09;之间的…

服务器系统装内存条,hp服务器怎么安装内存条 hp服务器内存推荐【图文】

服务器虚拟化增加了在每台惠普服务器上运行工作负载的数量&#xff0c;但是越来越多的计算需求则要求IT人员配备更好的HP服务器配件。因此需要对于HP服务器内存市场行情有一定的了解&#xff0c;而选择合适的HP服务器内存却是一件非常难的事情&#xff0c;今天就跟小编一起来看…

7个C语言小程序让你快速入门程序世界

1、题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f;程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。程序源代码&#xff1a;#include#…

去重 属性_面试中常问的List去重问题,你都答对了吗?

面试中经常被问到的list如何去重&#xff0c;用来考察你对list数据结构&#xff0c;以及相关方法的掌握&#xff0c;体现你的java基础学的是否牢固。我们大家都知道&#xff0c;set集合的特点就是没有重复的元素。如果集合中的数据类型是基本数据类型&#xff0c;可以直接将lis…

python paramiko模块下载_Python自动化运维实战:使用Python管理网络设备

现在&#xff0c;我们已经知道如何在不同的操作系统中使用和安装Python以及如何使用EVE-NG搭建网络拓扑。在本章中&#xff0c;我们将学习如何使用目前常用的网络自动化库自动完成各种网络任务。Python可以在不同的网络层上与网络设备进行交互。首先&#xff0c;Python可以通过…

cxf添加拦截器_在CXF API和拦截器中添加Gzip压缩

cxf添加拦截器如今&#xff0c;由于我们在响应中发送大量数据&#xff0c;因此必须对API响应执行Gziping。 它节省了网络带宽和交付时间&#xff0c;当然还节省了Internet上的空间。 CXF提供了以多种方式使用Gzip压缩的选项。 蓝图 注解 蓝图&#xff1a; <bean id"…