所有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

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

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

相关文章

通过init-connect + binlog 实现MySQL审计功能

背景&#xff1a; 假设这么一个情况&#xff0c;你是某公司mysql-DBA&#xff0c;某日突然公司数据库中的所有被人为删了。 尽管有数据备份&#xff0c;但是因服务停止而造成的损失上千万&#xff0c;现在公司需要查出那个做删除操作的人。 但是拥有数据库操作权限的人很多&…

AngularJS中ui-router全攻略

首先是angular-ui-router的基本用法。■ 如何引用依赖angular-ui-router angular.module(app,["ui.router"]).config(function($stateProvider){$stateProvider.state(stateName, stateCofig);}) ■ $stateProvider.state(stateName, stateConfig)stateName是string类…

如何为JBoss Developer Studio 8设置BPM和规则工具

最新的JBoss Developer Studio&#xff08;JBDS&#xff09;的发布带来了有关如何开始使用尚未安装的各种JBoss Integration和BPM产品工具集的问题。 在本系列文章中&#xff0c;我们将为您概述如何安装每套工具并说明它们支持哪些产品。 这将有助于您在着手进行下一个JBoss集…

基于HTML5陀螺仪实现ofo首页眼睛移动效果

最近用ofo小黄车App的时候&#xff0c;发现以前下方扫一扫变成了一个眼睛动的小黄人&#xff0c;觉得蛮有意思的&#xff0c;这里用HTML5仿一下效果。 ofo眼睛效果 效果分析 从效果中不难看出&#xff0c;是使用陀螺仪事件实现的。 这里先来看一下HTML5中陀螺仪事件的一些概…

定时开机 命令 自动开机

自动开机&#xff1a; 首先开机后按住Delete键&#xff0c;就是平常常用的删除按键&#xff0c;然后就会进入到BIOS界面。虽然是一个满眼E文的蓝色世界&#xff0c;但不要害怕&#xff0c;没有问题的。 在BIOS设置主界面中选择“Power”选项,进入电源管理窗口。有些机器是在“P…

多米诺骨牌 优化版

算法&#xff1a; 在之前搜索出状态的基础上&#xff0c;再压缩一次状态。 View Code //by yefeng #include<iostream> using namespace std;typedef long long LL; const int mod 9937; int mask,idx, n , m;struct Matrix{int mat[257][257];void zero(){ memse…

Apache Camel请向我解释这些端点选项的含义

在即将发布的Apache Camel 2.15中&#xff0c;我们使Camel更智能。 现在&#xff0c;它可以充当老师&#xff0c;并向您说明其配置方式以及这些选项的含义。 Camel可以做的第一课是告诉您如何配置所有端点以及这些选项的含义。 接下来我们要学习的课程是让Camel解释EIP的选项…

JS正则表达式的基础用法

RegExp&#xff08;正则表达式&#xff09;对象 正则表达式是一个描述字符模式的对象&#xff0c;可以处理更复杂的字符串。进行匹配替换。 常用的修饰符&#xff1a; i/m/g 使用方法&#xff1a; 【声明方法一: new RegExp(value)】 var patt new RegExp(value)&#xff1b…

JS获取屏幕浏览器网页高度和宽度属性

1 网页可见区域宽&#xff1a;document.body.clientWidth 2 网页可见区域高&#xff1a;document.body.clientHeight 3 网页可见区域宽&#xff1a;document.body.offsetWidth (包括边线的宽) 4 网页可见区域高&#xff1a;document.body.offsetHeight (包括边线的宽) 5 网页正…

微信扫码进入小程序

这几天开发完小程序之后&#xff0c;需要实现微信扫码进入小程序&#xff0c;坎坎坷坷的过程终于实现了&#xff0c;现在做一总结&#xff1a; 1、配置二维码规则&#xff1a; 2、页面插入代码即可&#xff1a; onLoad: function(options) {console.log("index 生命周期 o…

使用用户名/密码和Servlet安全性保护WebSockets

RFC 6455提供了WebSockets安全注意事项的完整列表。 其中一些是在协议本身中烘焙的&#xff0c;其他一些则需要更多有关如何在特定服务器上实现它们的解释。 让我们谈谈协议本身内置的一些安全性&#xff1a; HTTP请求中的Origin头仅包含标识发起该请求的主体&#xff08;网页…

文件的读取

这几天在研究文件读取问题&#xff0c;写了个小demo&#xff0c;如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body><input type…

关于stm32启动文件的选择

关于stm32启动文件的选择 1推荐- startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices - startup_stm32f10x_ld.s: for STM32 Low density devices - startup_stm32f10x_md_vl.s: for STM32 Medium density Value line devices - startup_stm32f10x_md.s: fo…

如何使用GZip和Jersey压缩Java REST API中的响应

在某些情况下&#xff0c;您的REST api会提供非常长的响应&#xff0c;我们都知道移动设备/网络上的传输速度和带宽仍然非常重要。 我认为这是开发支持移动应用程序的REST api时需要解决的第一个性能优化点。 你猜怎么了&#xff1f; 因为响应是文本&#xff0c;所以我们可以压…

C函数篇(recv函数)

简述 从一个套接口接收数据。表头文件&#xff1a;#include<sys/types.h>#include<sys/socket.h>int PASCAL FAR recv( SOCKET s, char FAR* buf, int len, int flags);s&#xff1a;一个标识已连接套接口的描述字。buf&#xff1a;用于接收数据的缓冲区。len&…

js文字排序的方法

拼音排序&#xff1a; var arr [{ a: 1, b: "我" }, { a: 1, b: "是" }, { a: 1, b: "帅" }, { a: 1, b: "哥" }, { a: 1, b: "你" }, { a: 1, b: "服" }, { a: 1, b: "不" }];arr.sort(function comp…

线程池之外:Java并发并不像您想象的那么糟糕

Apache Hadoop&#xff0c;Apache Spark&#xff0c;Akka&#xff0c;Java 8流和Quasar&#xff1a; 针对Java开发人员的经典用例以及最新的并发方法 关于并发性更新概念的讨论很多&#xff0c;但是许多开发人员还没有机会将他们的想法缠住。 在本文中&#xff0c;我们将详细介…

编写高质量的代码,改善c#程序的157个建议_之1~10

//编写高质量的代码&#xff0c;改善c#程序的157个建议# 1、正确操作字符串## 1* 确保尽量少的装箱* 避免分配额外的内存空间1. 会进行一次装箱C#string str1"str1"9;2. 没有装箱&#xff0c;调用的是整型的ToString方法C#string str2"str2"9.ToString();#…

vue中使用Ueditor编辑器 -- 1

一、 下载包&#xff1a; 从Ueditor的官网下载1.4.3.3jsp版本的Ueditor编辑器&#xff0c;官网地址为&#xff1a;http://ueditor.baidu.com/website/download.html 下载解压后会得到如果下文件目录&#xff1a; 将上述Ueditor文件夹拷贝到vue项目的static文件夹中&#xff0…

编译原理--递归下降分析实验C++

一、实验项目要求 1.实验目的 根据某一文法编制调试递归下降分析程序&#xff0c;以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。 2.实验要求 对下列文法&#xff0c;用递归下降分析法对任意输入的符号串进行分析&#xff1a; &#…