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

如何在JMix Rest中仅暴露指定JmixEntity而非全部?

解决JMix Rest API默认暴露所有实体的问题

要实现默认不开放所有实体的CRUD接口、仅暴露指定实体的需求,有两种主流方式:JMix原生配置和Spring扩展配置,具体如下:

一、JMix原生配置(推荐)

JMix本身提供了直接的配置项和注解来控制实体的Rest暴露:

  1. 全局关闭默认暴露
    在项目的application.properties中添加配置:

    jmix.rest.default-expose-all-entities=false
    

    这个配置会让所有标注@JmixEntity的实体默认不对外暴露Rest CRUD接口。

  2. 手动指定需要暴露的实体
    给需要开放Rest接口的实体添加JMix的@RestResource注解(注意是io.jmix.rest.annotation.RestResource包下的):

    @JmixEntity
    @RestResource(enabled = true)
    public class Customer {
        // 实体字段和逻辑
    }
    

    还可以通过注解参数细粒度控制CRUD操作的可用性,比如只开放查询和更新,禁用创建和删除:

    @RestResource(enabled = true, createEnabled = false, deleteEnabled = false)
    

二、Spring层面的扩展配置

如果需要更复杂的权限控制(比如基于角色、自定义逻辑),可以结合Spring的特性实现:

  • Spring Security拦截
    配置Spring Security的SecurityFilterChain,对JMix Rest的基础路径(默认是/rest)进行权限校验,只有拥有指定权限的请求才能访问。比如:
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(auth -> auth
                .requestMatchers("/rest/**").hasRole("REST_ACCESS")
                .anyRequest().permitAll());
        return http.build();
    }
    
  • 自定义Rest端点拦截
    可以自定义EntityRestController的代理或者切面,在请求处理前判断当前实体是否允许被访问,不过这种方式需要熟悉JMix Rest的内部实现,一般只在原生配置满足不了需求时使用。

内容的提问来源于stack exchange,提问作者Kada B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:32:09