You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JHipster7升级后如何用Elasticsearch用户过滤保护端点

JHipster v5升级v7.9.3:Elasticsearch权限过滤适配方案

问题背景

将JHipster v5应用升级至v7.9.3后,原有的Elasticsearch搜索权限控制逻辑无法直接复用:

  • JHipster 5中BloodPressureSearchRepository的search()方法支持直接传入BoolQueryBuilder,可在查询中添加用户登录过滤条件
  • JHipster 7中该方法仅接受String类型参数,但已构建好带用户过滤逻辑的BoolQueryBuilder,需要适配新的Repository方法实现权限控制

解决方案

观察BloodPressureSearchRepositoryInternal接口,发现存在search(Query query)重载方法,可通过NativeSearchQueryBuilder将自定义的BoolQueryBuilder封装为NativeSearchQuery,再调用该方法完成搜索。

修改Controller代码

替换原有的search(query, pageable)调用逻辑,改为使用自定义queryBuilder构建查询:

public ResponseEntity<List<BloodPressure>> searchBloodPressures(
    @RequestParam String query,
    @org.springdoc.api.annotations.ParameterObject Pageable pageable
) {
    log.debug("REST request to search for a page of BloodPressures for query {}", query);
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().must(queryStringQuery(query));
    if (SecurityUtils.isAuthenticated() && !SecurityUtils.hasCurrentUserThisAuthority(AuthoritiesConstants.ADMIN)) {
        queryBuilder = queryBuilder.filter(matchQuery("user.login", SecurityUtils.getCurrentUserLogin().orElse("")));
    }
    // 用NativeSearchQueryBuilder封装自定义queryBuilder并设置分页
    NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
        .withQuery(queryBuilder)
        .withPageable(pageable)
        .build();
    // 调用支持Query参数的search方法
    Page<BloodPressure> page = bloodPressureSearchRepository.search(nativeSearchQuery);
    HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
    return ResponseEntity.ok().headers(headers).body(page.getContent());
}

说明

  1. 利用NativeSearchQueryBuilder将已构建好的BoolQueryBuilder(包含用户过滤逻辑)转换为Spring Data Elasticsearch支持的NativeSearchQuery
  2. 通过withPageable(pageable)保留原有的分页参数
  3. 调用Repository中search(Query query)方法执行查询,实现与JHipster 5相同的权限控制效果

内容的提问来源于stack exchange,提问作者Matt Raible

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:14:58