如何使用自定义 Dropwizard 过滤器有选择地保护资源

2023-11-30

我正在使用 Dropwizard 0.9.2,我想创建一个不需要 GET 身份验证而需要基本 POST 身份验证的资源。

我努力了

@Path("/protectedPing")
@Produces(MediaType.TEXT_PLAIN)
public class ProtectedPing {

@GET
public String everybody() {

    return "pingpong";
}

@PermitAll
@POST
public String authenticated(){
    return "secret pingpong";
}

with

CachingAuthenticator<BasicCredentials, User> ca = new CachingAuthenticator<>(environment.metrics(), ldapAuthenticator, cbSpec);
AdminAuthorizer authorizer = new AdminAuthorizer();
BasicCredentialAuthFilter<User> bcaf = new BasicCredentialAuthFilter.Builder<User>().setAuthenticator(ca).setRealm("test-oauth").setAuthorizer(authorizer).buildAuthFilter();
environment.jersey().register(bcaf);
environment.jersey().register(RolesAllowedDynamicFeature.class);
environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class));
environment.jersey().register(new ProtectedPing());

这似乎导致所有对“/protectedPing”的请求都需要基本身份验证。

在 Dropwizard 0.9.2 中,文档说如果我有一个可以选择保护的资源,则创建一个自定义过滤器。我假设我需要这样做,但我不知道从哪里开始,或者这是否是我真正需要做的。


这更像是球衣问题而不是掉落向导问题。你可以在这里看看:https://jersey.java.net/documentation/latest/filters-and-interceptors.html

本质上你想要的是:

  1. 创建一个注释来指示您要测试身份验证(例如@AuthenticatePost)

  2. 创建资源并使用@AuthenticatePost注释正确的方法

  3. 创建您的身份验证过滤器(可能类似于您上面所做的那样)。

  4. 在动态功能中,测试注释是否存在于传入的资源上。这对于 post 来说是 true,对于 get 来说是 false。然后直接在资源方法上注册 AuthenticationFilter,而不是在资源上全局注册。

这将是我如何解决这个问题的半完整示例:

public class MyDynamicFeature implements DynamicFeature {

    @Override
    public void configure(ResourceInfo resourceInfo, FeatureContext context) {
        if(resourceInfo.getResourceMethod().getAnnotation(AuthenticateMe.class) != null ) {
            context.register(MyAuthFilter.class);
        }
    }

    public class MyAuthFilter implements ContainerRequestFilter {

        @Override
        public void filter(ContainerRequestContext requestContext) throws IOException {
            // do authentication here
        }

    }

    public @interface AuthenticateMe {

    }

    @Path("myPath")
    public class MyResource {

        @GET
        public String get() {
            return "get-method";
        }

        @POST
        @AuthenticateMe
        public String post() {
            return "post-method";
        }
    }
}

请注意,在向功能上下文注册身份验证之前,DynamicFeature 会检查身份验证注释是否存在。

我希望这有帮助,

如果您有任何疑问,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用自定义 Dropwizard 过滤器有选择地保护资源 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的

随机推荐

  • 为什么 SwiftUI 中的原始 View 没有主体?

    The View协议需要一个body财产 public protocol View associatedtype Body View ViewBuilder var body Self Body get 为什么 SwiftUI 中的一些内置
  • 将所有 PDF 字段设置为只读

    在 iTextSharp 中 有没有办法将表单上的所有字段设置为只读 目前我正在单独设置每一个 这很痛苦 formFields SetFieldProperty Applicant Phone setfflags PdfFormField
  • 禁用长按后退按钮(标注菜单)[重复]

    这个问题在这里已经有答案了 iOS14 引入了长按后退按钮 可打开一个标注菜单以返回到堆栈中的特定 VC 我想禁用它 是否有可能做这样的事情 如果是的话如何 Thanks 尝试设置backButtonDisplayMode to minim
  • C++ 中的参考初始化

    大家好 检查我自己的代码 我发现了这一有趣的行 const CString refStr CheckCondition T foo T bar 现在我完全不知所措 不明白为什么它是合法的 据我了解 必须使用右值或左值初始化 const 引用
  • XPath:仅根据 text() 获取后续兄弟

    使用相对XPath with Selenium 有没有办法获取文本内容following sibling 以兄弟姐妹的文本内容为指导 table class table tbody tr td Looking for td tr tbody
  • 有没有办法在 R 中的图文旁边添加图例,而不是完全在绘图上?

    我大众汽车使用绘制了一个dygraphdygraph函数从一个dygraphsR 包 我想知道有没有办法将图例放在图旁边 而不是像默认情况下那样完全放在图上 重现此图的代码如下 library archivist library dplyr
  • 将 WPF 视觉对象异步渲染为位图

    我看到 WinRT RenderTargetBitmap 能够通过 RenderAsync visual 异步渲染 Visual 方法 不幸的是 net渲染目标位图没有 RenderAsync 方法 net RenderTargetBitm
  • 在greasemonkey脚本中显示元素后立即修改元素(不是在页面完全加载后)?

    I have 这个脚本 适用于RottenTomatoes电影页面 修改了3个元素 1 个可见文本和 2 个工具提示内的文本 目前 由于greatmonkey的 run at document end 它修改元素仅在页面完全加载后 此外 烂
  • Java(Android) IOException:索引 7 处预期权威:http://

    我正在尝试使此功能从互联网下载文件 我向它传递了两个参数 from 网络上文件的 url to 本地文件路径 它引发的问题IOException打开流时 Authority expected at index 7 http 这是我的代码 p
  • 是否可以通过编程方式打开 Macbook Pro 键盘背光的各个按键?

    尽管我感觉这在技术上是不可能的 但无论如何还是值得一问 是否可以打开 Macbook Pro 的各个按键的键盘背光 我正在开发一款基于网格的软件 该软件允许用户通过按键盘上的任意键将光标定位在网格中的该点来进行导航 如果我能以某种方式打开某
  • Firebase 存储用户变量?

    我正在将 Firebase 用于我的初学者项目 并且我对所提供的文档感到困惑 我已经初始化了一个身份验证表单 并且它正在工作 但我不明白如何将其链接到实时数据库 我知道 用户 是当前登录的用户 但是如何存储当前用户的信息 在我的应用程序中
  • 我可以从 MediaPlayer 或 SoundPool 获取原始 PCM 数据吗?

    我使用 eclipse 和 android sdk 4 0 3 api lvl 15 创建一个基本的音乐播放器应用程序 我读了一下 发现有两个主要的类来播放声音 媒体播放器和声音池 SoundPool 在声音优先级和播放声音的速率方面具有更
  • 线条颜色作为 pandas 数据框中列值的函数

    我正在尝试将 pandas 数据框的两列相互绘制 并按第三列中的值进行分组 每条线的颜色应由第三列确定 即每组一种颜色 例如 import pandas as pd from matplotlib import pyplot as plt
  • 如何获取子对象的全局/世界位置?

    如何获取一个 Object3D 在另一个 Object3D 中的全局位置 setup var parent new THREE Object3D parent position set 100 100 100 var child new T
  • 键入时即可访问带结果的多字段搜索

    大家早上好 我今天的问题是关于多领域搜索 我有一个拆分表单 字段和单个记录位于顶部 数据表视图中的所有数据位于底部 我有多个想要搜索的字段 以便用户可以根据多个条件找到特定的人 这是一位同事帮助我完成的 VBA 现在运行良好 我想添加一个b
  • Update 3 后 Visual Studio 2013 Premium 解决方案加载错误

    我安装了 VS2013Update 3 现在打开解决方案时出现错误 Microsoft VisualStudio Web Publish WebPublishPackage MircosoftVisualStudio Web Publish
  • Ruby 中的映射和收集之间的区别?

    我用谷歌搜索了这个 得到了不完整 矛盾的意见 做一个实际上有什么区别吗 map并做一个collect在 Ruby Rails 中的数组上 The docs似乎没有提出任何建议 但是方法或性能可能存在差异吗 其实没有什么区别map在 C 中实
  • Polars:通过算法取消嵌套列,无需 for 循环

    我正在使用用嵌套结构 有时是多层深度 编写的多个镶木地板数据集 我需要输出一个扁平的 无结构 模式 现在我能想到的唯一方法是使用 for 循环来迭代列 这是一个简单的例子 我在其中进行循环 while len x name for x in
  • emacs24 中的词法评估

    谁能解释一下怎么做eval与 emacs24 一起工作吗 从eval描述 eval is a built in function in C source code eval FORM optional LEXICAL Evaluate FO
  • 如何使用自定义 Dropwizard 过滤器有选择地保护资源

    我正在使用 Dropwizard 0 9 2 我想创建一个不需要 GET 身份验证而需要基本 POST 身份验证的资源 我努力了 Path protectedPing Produces MediaType TEXT PLAIN public