使用 RESTlet 进行细粒度身份验证

2023-11-22

我想使用带有细粒度身份验证的 RESTlet 公开资源。我的ServerResource应该可以通过访问GET仅适用于经过身份验证的会员(使用基本身份验证)。但是,请求使用POST无需任何身份验证的呼叫者也应该可以使用。

为了澄清:http://路径/myapp/用户应该允许任何人注册使用POST,但只有注册会员才能GET所有用户的列表。

不幸的是,我对 RESTlet 不太感兴趣,我只找到了使用更粗略的身份验证的示例Restlets or Routers.

那么如何启用资源的可选身份验证并在每个方法级别检查它们?

提前致谢!


在 RESTlet 2.0 中进行基本身份验证(我假设您正在使用 2.0,因为您提到了ServerResource),你需要使用ChallengeAuthenticator。如果配置为optional = true那么只有当您调用时才会请求身份验证ChallengeAuthenticator.challenge().

您可以使用以下内容创建您的应用程序authenticate()方法,并在需要访问要保护的资源时调用此方法:

应用:

package example;

import org.restlet.*;
import org.restlet.data.ChallengeScheme;
import org.restlet.routing.Router;
import org.restlet.security.*;

public class ExampleApp extends Application {

    private ChallengeAuthenticator authenticatior;

    private ChallengeAuthenticator createAuthenticator() {
        Context context = getContext();
        boolean optional = true;
        ChallengeScheme challengeScheme = ChallengeScheme.HTTP_BASIC;
        String realm = "Example site";

        // MapVerifier isn't very secure; see docs for alternatives
        MapVerifier verifier = new MapVerifier();
        verifier.getLocalSecrets().put("user", "password".toCharArray());

        ChallengeAuthenticator auth = new ChallengeAuthenticator(context, optional, challengeScheme, realm, verifier) {
            @Override
            protected boolean authenticate(Request request, Response response) {
                if (request.getChallengeResponse() == null) {
                    return false;
                } else {
                    return super.authenticate(request, response);
                }
            }
        };

        return auth;
    }

    @Override
    public Restlet createInboundRoot() {
        this.authenticatior = createAuthenticator();

        Router router = new Router();
        router.attach("/user", UserResource.class);

        authenticatior.setNext(router);
        return authenticatior;
    }

    public boolean authenticate(Request request, Response response) {
        if (!request.getClientInfo().isAuthenticated()) {
            authenticatior.challenge(response, false);
            return false;
        }
        return true;
    }

}

资源:

package example;

import org.restlet.data.MediaType;
import org.restlet.representation.EmptyRepresentation;
import org.restlet.representation.Representation;
import org.restlet.representation.StringRepresentation;
import org.restlet.resource.ServerResource;

public class UserResource extends ServerResource {

    @Override
    public Representation get() {
        ExampleApp app = (ExampleApp) getApplication();
        if (!app.authenticate(getRequest(), getResponse())) {
            // Not authenticated
            return new EmptyRepresentation();
        }

        // Generate list of users
        // ...
    }     

    @Override
    public Representation post(Representation entity) {
        // Handle post
        // ...
    }

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

使用 RESTlet 进行细粒度身份验证 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 使用 SSL 证书验证 Web 浏览器

    是否可以使用 ssl 证书对 Web 浏览器进行身份验证 假设我在应用程序中存储私钥 有什么方法可以从浏览器读取密钥并尝试基于该私钥进行身份验证 您可以使用 SSL TLS 客户端证书身份验证来对浏览器 用户进行身份验证 服务器必须请求客户
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 如何通过进程 id 获取进程的 stdin? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我知道我可以获得流程stdin在中使用子流程python like import sub
  • Logback:SizeAndTimeBasedRollingPolicy 将totalSizeCap 应用于maxHistory 中的每一天

    登录版本1 2 3 我想在我们的 logback 配置文件 logback xml 中使用 SizeAndTimeBasedRollingPolicy 但此时 SizeAndTimeBasedRollingPolicy 无法按预期运行 ht
  • Spring Data MongoDB:BigInteger 到 ObjectId 转换

    我在使用 Spring Data MongoDB 更新查询时遇到问题 我检索一些对象的 id 作为 BigInteger 值 然后我想进行以下查询 Query query new Query Criteria where id is id
  • 如何删除codeigniter上的cookie

    我不知道如何删除cookie 我想要的是当我提交表格时 cookie 也被删除 我尝试了 delete cookie name 但不起作用 我想是因为我创建的cookiejavascript 请检查我的代码来解决这个问题 这是我的示例文本字
  • 通过 JNDI 使用 ActiveMQ

    我正在尝试使用 JNDI 创建与 ActiveMQ 的简单连接 I have 名为 example A 的队列 根据ActiveMQ 文档涉及 JNDI 如果我想通过 JNDI 使用 ConectionFactories 和队列 主题 我必
  • 如何在视图出现之前滚动到 iPhone 上 UITableView 的底部

    我有一个UITableView填充有不同高度的单元格 我希望当视图被推入视图时表格滚动到底部 我目前有以下功能 NSIndexPath indexPath NSIndexPath indexPathForRow log count 1 in
  • hibernate:在运行时创建实体(带注释)

    是否可以在运行时创建休眠实体类 带注释 应该和运行时添加的表有关 实体应该对 Hibernate 可见 这一点很重要 一般情况下可以吗 您能就这个问题给我一些建议吗 我明白 反思是关键词 但还要寻找更多的词 问候 在这种情况下 您可能希望在
  • 春天不行。 [未初始化常量 Spring::SID::DL ]

    我无法运行 Spring 这是错误日志 myid no MacBook Pro myid spring Users myid rbenv versions 1 9 3 p484 lib ruby gems 1 9 1 gems spring
  • 私有字段会被子类继承吗?

    我读过 子类不能继承私有字段或方法 然而 在这个例子中 class SuperClass private int n 3 int getN return n class SubClass extends SuperClass public
  • c中“atoi”和“strtol”之间的用法差异

    我一直在使用atoi已经一年了 最近几天我遇到一个问题 atoi 20 给出的值为0作为输出 当我用谷歌搜索这个问题时 我发现它已被弃用并且strtol应该使用 我发现的有趣的一点是atoi内部使用strtol 那么 当我将其更改为时 问题
  • 使用 StreamReader 查找字符串的有效方法

    我获取网络响应并使用 Streamreader 获取字符串形式的响应 我的代码是 HttpWebResponse response HttpWebResponse request GetResponse StreamReader reade
  • 如何使用 autofac 注册类型化 httpClient 服务?

    我正在创建 MVC Web 应用程序 该应用程序使用单独的 net core 2 2 调用 apiHttpClients 调用每个控制器 相同的 api Ex 对于用户控制器操作 UserService httpclient 对于后控制器操
  • rgdal“gdal-config”中配置错误

    我目前正在 Linux 集群上用 R 运行一些物种分布建模和丰富度映射 为了运行我的分析 我需要安装 rgdal 以便建模包中的栅格函数正常工作 我已经安装了 proj4 和 gdal 但是 当我尝试安装 rgdal 时 我收到一条错误消息
  • 成为 EC2 上的根设备意味着什么?

    我在 EC2 文档中找不到答案 它是做什么用的 如果我启动了 EBS 支持的实例 则该实例的根设备将是 EBS 卷 如果我在实例上安装一些工具 软件 这些工具 软件是否会默认安装在根实例上 不过我想这个问题确实来自于对根设备的了解很少 有这
  • 如何添加到 MySQL 中的每一行?

    我们有一个简单整数列 我们想要向每一行添加值 10 对于 MySQL 数据库 我们如何在 sql 中执行此操作 实际上我们还有另一个列需要做同样的事情 它是一个日期 我们需要在日期上添加一个月 怎么做 整数 UPDATE table nam
  • 指针是否保证>某个值?

    在 C 中 当我这样做时new 甚至malloc 是否能保证返回地址大于某个值 因为 在这个项目中 我发现使用 0 1k 作为枚举非常有用 但如果有可能获得这么低的值 我不想这样做 我唯一的目标系统是 32 位或 64 位 CPU 操作系统
  • lxml 标签名称带有“:”

    我正在尝试使用 lxml etree 从 JSON 对象创建 xml 树 有些标记名中包含冒号 例如 设置 当前 我尝试使用 settings current 作为标签名称 但我得到这个 ns0 当前 xmlns ns0 设置 是的 首先阅
  • django 2 中的迁移错误; AttributeError:“str”对象没有属性“decode”

    我正在我新建的名为 core 的应用程序上运行迁移 当我在其上运行迁移时 我收到一个错误 告诉我这一点 query query decode errors replace AttributeError str object has no a
  • LXML:无法导入 etree

    我访问此页面并下载了 tar 文件 http pypi python org pypi lxml 2 3 4 downloads 然后 我将 lxml 文件夹复制到我的 Python26 Lib 文件夹中 现在 当我走向口译员并输入from
  • 使用 RESTlet 进行细粒度身份验证

    我想使用带有细粒度身份验证的 RESTlet 公开资源 我的ServerResource应该可以通过访问GET仅适用于经过身份验证的会员 使用基本身份验证 但是 请求使用POST无需任何身份验证的呼叫者也应该可以使用 为了澄清 http 路