获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例
获取http请求标头
在使用Java EE开发和发展REST API的过程中,有些情况下您希望以更精细的方式(视情况)对传入的HTTP请求(特别是标头参数)进行“观察” Servlet过滤器或更具体的ContainerRequestFilters 。
我发现在某些情况下非常方便的一种可能方式是,在我的JAXRS Resource实现中添加CDI拦截器 ,该拦截器最终可以访问传入的HTTP请求并执行某些“自定义”逻辑。 作为开发人员,我可以完全控制–只需添加或删除自定义批注即可在哪个路径(哪个路径)中拦截请求。随着Java EE 7的引入,混合“关注点”变得更加容易,因此您可以轻松注入普通CDI拦截器的HTTP请求 。
下面,我仅记录一个非常简单的示例,其中我使用一个自定义拦截器来“拦截”业务REST API上的HTTP请求,以便执行一些非常特定的自定义身份验证逻辑。 我正在检查在我的REST API中发起请求的“用户”是否具有系统定义的某些特定自定义角色。 当然,整个示例只是一个示例,但是您明白了。
为了引入这样一个组件,您需要两件事:
- 引入自定义注释,该注释将在定义后用于激活拦截器
- 实现CDI拦截器。
- 在其余api的路径/资源上应用注释
注释界面
这里没有什么特别的,只是一个自定义的运行时批注,因此我们可以使用它来“标记” JAXRS API的特定方法。
package gr.javapapo.sample.cdi;/*** Created by <a href="mailto:javapapo@mac.com">javapapo</a> on 24/09/15.*/
import javax.enterprise.util.Nonbinding;
import javax.interceptor.InterceptorBinding;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface CheckRequest {@Nonbinding String role() default "ADMIN";
}
拦截器的实现
值得注意的几点:
- 拦截器已使用我们的自定义注释“标记”了-简单
- 我们@Inject HttpServletReqest
- 我们基于注释详细信息应用一些自定义逻辑(我阅读了定义中的所有参数)
- 从请求中,我读取了标头并基于注释参数–我做了一些基本的逻辑
package gr.javapapo.sample.cdi;import javax.inject.Inject;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.NotAllowedException;/*** CDI interceptor for the {@linkplain CheckRequest} annotation* Created by <a href="mailto:javapapo@mac.com">javapapo</a> on 24/09/15.*/
@Interceptor
@CheckRequest
public class CheckRequestInterceptor {@InjectHttpServletRequest request;@AroundInvokepublic Object checkAccess(InvocationContext ctx) throws Exception {CheckRequest annotation = ctx.getMethod().getAnnotation(CheckRequest.class);String role = annotation.role();String roleToken = request.getHeader("roleToken");if(roleToken==null && !role.equals(roleToken)){throw new NotAllowedException("Not allowed if your request does not have the roleToken header " +"or your role is not correct ");}return ctx.proceed();}
}
应用拦截器/注释
最终,您可以注释@Path JAXRS资源和方法,以便“踢”自定义逻辑:
@Path("/status")
public class StatusResource {/*** Returns a simple JSON object, regarding the app status, n** @return Response <JsonObject>*/@GET@Produces(MediaType.APPLICATION_JSON)@CheckRequest(role="ADMIN")public Response getStatus() {JsonObject object = Json.createObjectBuilder().add("status", "Status with CDI internceptor check,It Works at " + LocalDateTime.now().toString()).build();Response.ResponseBuilder repBuilder = Response.ok().entity(object);return repBuilder.build();}
- 您可以在github上这个非常简单的示例项目中找到所有文件。
翻译自: https://www.javacodegeeks.com/2015/10/cdi-interceptor-of-http-request-and-header-params-simple-example.html
获取http请求标头
获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例相关推荐
- HTTP请求和标头参数的CDI拦截器-简单示例
在使用Java EE开发和发展REST API的过程中,有些情况下您希望以更细粒度的方式(视情况而定)对传入的HTTP请求(特别是标头参数)进行"观察" Servlet过滤器或更具 ...
- dio拦截器 flutter_详解flutter之网络请求dio,请求,拦截器简单示例
flutter一直很火的网络请求插件dio 直接上代码,写成一个类,可以直接使用 包含请求的封装,拦截器的封装 import 'package:dio/dio.dart'; import 'dart: ...
- PHP 函数调用次数,php获取页面执行时间,数据库读写次数,函数调用次数等(THINKphp)的简单示例...
感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧!THINKphp里面有调试运行状态的效果: Process:0.2463s (Load:0.0003s Init:0.0010s Exec:0.1 ...
- java 拦截器响应中取所有参数,spring boot拦截器中获取request post请求中的参数
最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取 ...
- 拦截器获取请求参数post_spring boot拦截器中获取request post请求中的参数
最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取 ...
- python自动搜索请求失败_http请求 request失败自动重新尝试代码示例
本文研究的主要是http请求 request失败自动重新尝试的一个例子,具体如下. 需求 最近开发一个项目,要实现的一个场景是对于某个http请求,如果请求失败,需要再自动尝试几次,并记录异常原因便于 ...
- springmvc拦截器对请求参数解密_SpringMVC拦截器如何修改请求参数
拦截器1,基本拦截器: package cn.ijava.interceptor; import javax.servlet.http.HttpServletRequest; import javax ...
- java ajax无权限跳转_ajax请求重定向后页面不跳转问题 (使用拦截器)
一.ajax重定向的问题. 默认ajax是不支持重定向的,因为ajax本身就是局部刷新,不重新加载页面的.如果需要用到重定向可以通过以下方法: 第一步:后端代码改造. 在后端(大部分情况都是拦截器)中 ...
- 拦截器获取请求参数post_SpringBoot拦截器如何获取http请求参数
1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景 ...
最新文章
- 一个简单的Makefile
- gson解析天气json_几种常用JSON解析库性能比较
- 推荐算法炼丹笔记:如何让你的推荐系统具有可解释性?
- ITK:在图像中存储非像素数据
- [Python人工智能] 二十四.易学智能GPU搭建Keras环境实现LSTM恶意URL请求分类
- zabbix实现mysql数据库的监控
- homebrew 常用命令
- ulua 动态反射在IOS上的问题
- Java 目录操作二(获取文件的上级目录、获取目录最后修改时间、打印目录结构、遍历指定目录下的所有目录)
- [UI界面]-UIWindow
- 2.6.24内核中对S3C2440的引导启动分析
- 如何将 Mac 置入睡眠状态或唤醒 Mac?
- C语言面试题分类-位运算
- HTML5 WebRTC API无需网络获取本地IP
- 图书馆占座系统(二)
- mysql中使用触发器实例
- python正交表结果生成
- 在一线城市生活一辈子需要多少钱
- php制作特效文字,PPT制作文字特效 PPT特效文字制作教程
- CSDN 中 MarkDown编辑器自动生成目录
热门文章
- P7294-[USACO21JAN]Minimum Cost Paths P【单调栈】
- jzoj6824-[2020.10.17提高组模拟]英雄联盟【期望】
- jzoj3850-Fibonacci进制【斐波那契倍增】
- 欢乐纪中某A组赛【2019.7.5】
- jzoj4637-大鱼海棠【博弈论】
- P3385-[模板]负环【SPFA】
- 【ST表】【单调队列】Window(jzoj 1326)
- js Date 函数方法
- Oracle入门(十二H)之设置、恢复和删除不可用列
- 你必须了解Spring的生态