当前位置: 首页 > 知识库问答 >
问题:

使用Olingo和JPA进行授权

姚臻
2023-03-14

我的问题是:为了实现授权,是否有一种简单的方法来更改Olingo JPA处理器以在默认情况下连接表和过滤实体?这将需要我能够传入帐户过滤,也限制所有的结果。

我也尝试过这里描述的预处理和后处理。但是,过滤需要在查询中进行,而不是在返回结果之后,因为JPA查询将返回太多的结果,并且转换数千个对象的时间长且成本高。

到目前为止,我已经实现了一个CustomoDataJPaprocessor。但是,现在需要重写和重写org.apache.olingo.odata2.JPA.processor.core.access.data.jpaProcessorImpl#ProcessMethod,并用我想要的功能修改JPA查询。您将看到我实现了一个新的JPAProcessor,在这里我调用process并发送我的帐户。下面是我的CustomoDataJPaprocessor的readEntitySet方法中的代码:

    /* Pre Process Step */
    preprocess( );
    List<String> accounts = new ArrayList<>();

    //This is what the original readEntitySet does
    //ODataJPAFactory.createFactory().getODataJPAAccessFactory().getODataJPAResponseBuilder(oDataJPAContext);

    //Using custom JPA Processor that I added
    jpaProcessor = new CustomJPAProcessor(this.oDataJPAContext);
    CustomJPAProcessor customJPAProcessor = (CustomJPAProcessor)jpaProcessor;
    List<Object> jpaEntities = customJPAProcessor.process(uriParserResultView, accounts);

    //What the docs want you to do http://olingo.apache.org/doc/odata2/tutorials/CustomODataJPAProcessor.html
    //java.util.List<Object> jpaEntities = jpaProcessor.process(uriParserResultView);

   /* Post Process Step */
    postProcess( );

共有1个答案

陆信瑞
2023-03-14

我不知道你是否在努力。我现在正在研究这个问题。Olingo提供ODataJPAQueryExtensionEntityListener,该侦听器在执行BuildQuery前一步由JPAQueryBuilder执行

使用这个无状态侦听器,您可以替换buildQuery方法,这样您就可以访问和更改包含JPQL查询的字符串jpqlStatement.toString()。

我认为比本机SQL更好

 类似资料:
  • 我试图为OData2服务器实现一个自定义授权方案,该方案使用Apache Olingo JPA注释处理器公开;授权涉及一个基本用户:操作对,用于限制数据库上的查询/更新/插入/删除操作;其思想是通过用户名/密码保护服务器层(Tomcat),然后将用户id传播到OData层以执行权限检查。 任何帮助都将不胜感激。 你好,-爱德华多。

  • 我想写一个应用程序,允许与数据交互的两种RESTful形式;常规REST CRUDendpoint和Web-UI。 过去,我在JS中实现了UI的大部分功能,这将调用常规的RESTendpoint。这很好,但对于这个应用程序,我想使用Qute来执行生成页面内容的大部分基本功能。但是,为了正确地管理endpoint并确保正确的RBAC控制,我需要通过cookie而不是普通的头来访问JWT。这似乎是可能

  • 我在学习一些示例,在这些示例中,我们可以使用Apache Olingo和MySQL、JPA和Tomcat web服务器生成OData服务。这个示例完全基于显示来自MySQL数据库的数据。 我如何能执行类似创建,更新和删除的操作基于以上的例子在链接。 service.java 请用一些好的例子和概念来指导我。 提前感谢你。

  • 我有一个带有spring Boot(v2.3.3)和spring数据的spring web应用程序。我的评估表包含以下列: Id 我的用例是表中名称和地址的任何更改评估应该创建一个新行,版本以相同的id递增。 因此,基本上只有当地址或姓名更新时,才能在评估表中插入新记录。下面是一个示例: 现有记录: 例如,名称已更新为Ryan,应该有两行,如下所示: 因此,基本上,任何名称和地址的变化都应在评估表

  • 原因:java.lang.annotation.annotationFormaterror:无效默认值:public abstract java.lang.class org.springframework.data.jpa.repository.config.enableJParepositories.repositoryBaseClass()

  • 我有一个移动(本机)和Web应用程序(SPA),它与后端微服务(在核心2.0中开发)对话,以进行身份验证/授权和其他与域相关的功能,该功能已使用Opendi的配置。这两个应用程序都获得了访问令牌。我遇到的问题是,所有微服务都应该接受无记名访问令牌和登录用户的身份验证/授权(中央身份验证服务),在身份验证微服务中生成的访问令牌(开放身份验证2.*)。那么,我在微服务中缺少哪些更改,其中REST AP