如何在JMix Rest中仅暴露指定JmixEntity而非全部?
解决JMix Rest API默认暴露所有实体的问题
要实现默认不开放所有实体的CRUD接口、仅暴露指定实体的需求,有两种主流方式:JMix原生配置和Spring扩展配置,具体如下:
一、JMix原生配置(推荐)
JMix本身提供了直接的配置项和注解来控制实体的Rest暴露:
全局关闭默认暴露
在项目的application.properties中添加配置:jmix.rest.default-expose-all-entities=false这个配置会让所有标注
@JmixEntity的实体默认不对外暴露Rest CRUD接口。手动指定需要暴露的实体
给需要开放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
相关产品推荐
相关产品推荐

