首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何限制某些用户使用PUT with Spring Data Rest编辑对象的所有属性?

要限制某些用户使用PUT方法编辑对象的所有属性,可以通过以下步骤实现:

  1. 首先,需要在Spring Data Rest中配置安全性。可以使用Spring Security来实现身份验证和授权。通过配置适当的角色和权限,可以限制用户对资源的访问和操作。
  2. 创建一个自定义的权限验证类,继承自org.springframework.security.access.PermissionEvaluator接口。在该类中,实现hasPermission方法,用于判断用户是否有权限进行PUT操作。
  3. 在自定义权限验证类中,通过注入org.springframework.security.core.Authentication对象,获取当前用户的信息。可以使用该信息来判断用户是否有权限进行PUT操作。
  4. 在Spring Data Rest的实体类上,使用@PreAuthorize注解来限制用户对资源的访问和操作。在该注解中,使用SpEL表达式调用自定义权限验证类中的hasPermission方法,判断用户是否有权限进行PUT操作。
  5. 在SpEL表达式中,可以使用#entity关键字引用当前要编辑的对象。通过判断#entity的属性,可以限制用户对对象属性的编辑。

以下是一个示例代码:

代码语言:java
复制
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends GlobalMethodSecurityConfiguration {

    @Autowired
    private CustomPermissionEvaluator permissionEvaluator;

    @Override
    protected MethodSecurityExpressionHandler createExpressionHandler() {
        DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
        expressionHandler.setPermissionEvaluator(permissionEvaluator);
        return expressionHandler;
    }
}

@Component
public class CustomPermissionEvaluator implements PermissionEvaluator {

    @Override
    public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
        // 根据authentication获取当前用户信息,判断是否有权限进行PUT操作
        // 可以根据targetDomainObject判断要编辑的对象属性
        // 返回true表示有权限,返回false表示无权限
    }

    @Override
    public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
        throw new UnsupportedOperationException();
    }
}

@Entity
@PreAuthorize("hasPermission(#entity, 'PUT')")
public class YourEntity {
    // 实体类定义
}

通过以上步骤,可以限制某些用户使用PUT方法编辑对象的所有属性。在自定义权限验证类中,可以根据具体业务需求和用户角色,灵活地控制用户的访问权限。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Data REST不完全指南(二)

上一篇文章介绍了Spring Data REST功能及特征,以及演示了如何在项目中引入Spring Data REST并简单地启动演示了Spring Data REST项目。...如果仅仅是上一篇文章中对Spring Data REST使用,那无法做到在日常开发中使用Spring Data REST,所以在上一篇文章中,我们列出了日常api开发中一些必要功能: 需要满足一些要求...---- 针对接口级别,方法级别,字段级别进行访问限制 所谓访问限制,这里我们目的是指定某些资源不对外暴露,Spring Data REST使用注解来实现各级别的访问限制。...---- 对数据增删改查限制 Spring Data REST提供了对资源请求限制,比如对特定请求方法限制,对特定资源访问限制。...Spring Data REST提供了了四个级别的资源限制级别: ALL:公开所有Spring Data存储库,无论其Java可见性或注释配置如何

1.1K30

Spring认证中国教育管理中心-Spring Data REST框架教程一

以下示例展示了如何使用 Gradle 在 Spring Boot 项目中包含 Spring Data Rest: 示例 3....compile("org.springframework.boot:spring-boot-starter-data-rest") ... } 以下示例展示了如何使用 Maven 在 Spring...Data REST 属性 3.5.1.设置存储库检测策略 Spring Data REST 使用 RepositoryDetectionStrategy来确定存储库是否作为 REST 资源导出。...: 弹簧数据 JPA 春季数据MongoDB 弹簧数据 Neo4j Spring Data GemFire 这些链接指南介绍了如何为相关数据存储添加依赖项、配置域对象和定义存储库。...关于如何在 JSON 中表示链接,有一些相互竞争事实上标准。默认情况下,Spring Data REST 使用HAL来呈现响应。HAL 定义要包含在返回文档属性链接。

1.7K10
  • Spring MVC 请求映射与参数

    除了使用 Map 之外,Spring MVC 还可以使用 Model 类型对象来装载 Model 数据。...严格按照 REST 风格写出来服务器,一个 URL 相当于一个业务对象,请求 method 中 get、post、put、delete 分别对应对象查询、新增、修改、删除,服务器还可以根据请求头需要返回...我们希望点击查询列表中编辑”连接,转向一个单一信息编辑页面,并把要修改记录 ID 专递过去。 通常我们可以使用“edit?...REST 风格和优化路径,Spring MVC 还支持使用@PathVariable 路径参数传递。...(初学时不是非常建议使用“路径参数”方式传参,因为可能会引起相对路径混乱) 对象型参数  当我们完成了一个表单编辑,要提交数据时,表单中往往存在许多元素,这些元素对应着一个对象许多属性

    1.5K20

    2019-05-31 使用 REST-Assured 测试 REST API 进阶技巧和最佳实践

    从本质上说,REST API 测试主要是测试 HTTP GET/POST/DELETE/PUT 这几个方法。其中,最复杂主要是 GET 和 POST/PUT 两种情况。...一般来说,生成 schema 模板会列出所有属性及其类型。 然后在这个 schema 基础上我们来分析每个属性,根据不同类型加上必要限制条件。每种限制条件都相当于测试用例中一个验证点。...REST-assured 也支持类似于 Ruby block 方来进行搜索验证某些属性。...在测试 POST/PUT 方法时,最麻烦地方是请求体中 property 非常多,而且各自有不同限制条件。为了测试非法输入能正确被系统识别出来,要测试很多参数组合。...小结: 本文介绍了如何使用 Rest-Assured 和 JSON Schema 测试 REST API 方法及其他技巧。

    1.8K20

    Spring Data REST不完全指南(三)

    上一篇我们介绍了使用Spring Data REST一些高级特性,以及使用代码演示了如何使用这些高级特性。本文将继续讲解前面我们列出来七个高级特性中后四个。...至此,这些特性能满足我们大部分接口开发场景。 需要满足一些要求: 1.针对字段级别,方法级别,类级别进行限制(禁止某些字段,方法,接口对外映射)。...---- 对所传参数进行值校验 对于值校验,Spring 提供了Validator接口,Spring Data REST提供了使用Validator来进行值校验功能。...---- 总结 至此,我们先前列出所有功能特性三篇文章中都有涉及到,通过引入这些功能特性,我们能更加轻松使用Spring Data REST,并且也能满足我们大部分接口开发场景。...当然三篇文章不能涉及Spring Data REST全部,有兴趣小伙伴可以访问Spring Data REST官方文档查看更多关于Spring Data REST特性及信息。

    66320

    重学SpringBoot系列之RestFul接口及常用注解

    当然也不是所有的接口,都能用REST形式来表述。在实际工作中,灵活运用,我们用RESTful风格目的是为大家提供统一标准,避免不必要沟通成本浪费,形成一种通用风格。...,用户读取这个属性就知道下一步该调用什么API或者可以调用什么API了。...那么如何响应其他类型数据?其中判别原理又是什么?...但是,不仅JSON可以表达对象数据类型,XML也可以。如果我们希望使用XML格式该怎么告知Spring呢,那就要使用到produces属性了。...---- 常用注解开发一个RESTful接口 开发REST接口 第一步:定义资源(对象) @NoArgsConstructor @Data @Builder public class Self {

    1.6K10

    Spring Data RESTSpring RestTemplate 实战详解

    (1)get 请求样例,根据 HTTP get 方法取用户基本信息。代码如下: //直接使用getForObject返回接口api/user/1User实体json对象。...hal格式rest api使用 compile('org.springframework.data:spring-data-rest-hal-browser:3.0.3.RELEASE') (3...Spring Data REST 提供与 Spring HATEOAS 集成,并为用户提供一个扩展钩,用来更改客户端资源表示格式。...类型为ResourceProcessor>所有 bean 将自动由 Spring Data REST 导出器拾取,并在序列化类型为 T 实体时触发。...Boot 2.0 加载其原理 通过我们前面的快速开始,我们大概知道了如何配置 Spring Data Rest,我们来解刨一下它在 Spring Boot 2.0 下是如何工作

    5.4K50

    SpringBoot学习笔记(三)——Spring MVC控制器、 Restful、Swagger

    org.springframework.stereotype.Controller注解类型用于声明Spring实例是一个控制器(在讲IOC时还提到了另外3个注解);Spring可以使用扫描机制来找到应用程序中所有基于注解控制器类...该属性使用最频繁,最重要一个属性,如果只指定该属性时可以把value略去。Spring Framework 4.2引入了一流支持声明和查找注释属性别名。...你会看到 Spring MVC 将使用这样相同逻辑来映射其它方法。 ...可以限制客户端发送到服务器请求参数为某些特定值或不为某些值,如下代码所示: //请求参数必须包含id=215与name不等于abc @RequestMapping(value = "...4、请完成一个产品管理功能 ,产品实体包含如下属性 Product产品(id编号,title名称,price价格) 要求定义好完整Rest服务,使用R.java返回结果,使用POSTMAN先测试后完成前端

    1.5K10

    spring Boot 配置文件详解

    概要        前面我们讲述了如何搭建一个简单 spring Boot 应用(参见Spring Boot - 初探),这里,我们来学习如何对项目进行相关配置,包括系统构建、自动配置、依赖注入、开发工具等...Support for exposing Spring Data repositories over REST via spring-data-rest-webmvc. spring-boot-starter-data-solr...如果你想禁用禁用某些配置,可以通过 @EnableAutoConfiguration 注解exclude属性来禁用它。...") } 开发环境属性默认值        程序猿在开发环境进行开发时候,往往关注是程序有没有什么问题,而用户则关心用户体验,所以,很多参数在开发环境和正式环境是有区别的。...全局参数设置        在当前用户根目录下添加一个名为.spring-boot-devtools.properties文件,里面设置属性将会对所有使用spring-boot-devtools

    1.5K50

    Spring {Boot,Data,Security} 历史漏洞研究

    Spring Data 一个核心功能是对象映射,即创建对应业务数据结构实例,并将本地数据中数据结构映射到这些实例上。这分为两个步骤,首先是通过反射创建对象,然后填充对象内部属性值。...不过由于反射开销较大,因此 Spring Data 进行了一些优化,比如创建对象会在运行时生成一个对应工厂类 ObjectInstantiator,填充属性也是使用类似的动态生成 PropertyAccessor...Data Commons 或者 Spring Data REST 都可以支持 Web 数据绑定对象。...中说过,对于某些格式请求处理函数,Spring 框架可以将 HTTP 请求转换为对应 Bean 对象,这个过程称为对象绑定。...代理认证 (Proxy Authentication) 一个典型使用场景是: 用户直接面对是 A 应用,该应用使用 CAS 进行保护; A 应用在后端需要使用 S 应用去获取某些数据; S 应用也收到

    2.6K20

    赏心悦目的RESTful API这样来设计!

    我们来了解一下 如何设计和开发一个高可用 REST APIs 网上一直有关于"最好Restful API设计"争论,何为最好,至今没有一个官方指导。...本文总结 RESTful 设计细节,介绍如何设计出易于理解和使用 API。...这时,客户端发出 HTTP 请求,要加上 X-HTTP-Method-Override属性,告诉服务器应该使用哪一个动词,覆盖 POST方法。...上述动词 + 名词组合是不是清晰多了,没有杂乱动词在 URL 中,大家理解含义相同 URL 层级 现实中哪有这么简单 CRUD,资源相互关联与嵌套很常见,查找 id 是 12 用户所有帖子...API 文档 Swagger是一种广泛使用工具来用来记录与呈现 REST API,它提供了一种探索特定 API 使用方法,因此允许开发人员理解底层语义行为。

    1.4K10

    python教程

    请求(Request)对象核心功能是request.data属性,这个属性与request.POST相似,但是它对Web APIs更加有用。 request.POST # 只处理表单数据。...4, 授权(Authentication)与权限(Permissions) 当前,我们API没有限制谁能编辑或删除snippets代码。...唯一限制就是include链接必须使用'rest_framework'名字空间。现在如果你刷新浏览器页面,你会看到右上角'Login'链接。...我们不会返回一个对象实例,而是对象实例一个属性。 我们会是使用基类代表实例,并创建我们自己.get()方法,而不是用普通视图。...REST框架支持以上所有方式,都能适应正向或者反向关系,或者就行使用一般外键一样使用自定义管理方式。 这种情况下,我们想要在实体之间使用超链接方式。

    5.1K10

    如何设计好RESTful API

    我们来了解一下 如何设计和开发一个高可用 REST APIs 网上一直有关于"最好Restful API设计"争论,何为最好,至今没有一个官方指导。...本文总结 RESTful 设计细节,介绍如何设计出易于理解和使用 API。...这时,客户端发出 HTTP 请求,要加上 X-HTTP-Method-Override属性,告诉服务器应该使用哪一个动词,覆盖 POST方法。...,没有杂乱动词在 URL 中,大家理解含义相同 URL 层级 现实中哪有这么简单 CRUD,资源相互关联与嵌套很常见,查找 id 是 12 用户所有帖子, 如何设计这个 URL,下面两种设计也会有争论...API 文档 Swagger是一种广泛使用工具来用来记录与呈现 REST API,它提供了一种探索特定 API 使用方法,因此允许开发人员理解底层语义行为。

    1.6K20

    SpringBoot-原理篇

    步骤一:属性类定义bean并指定bean访问名称 如果此处不设置bean访问名称,spring使用自己命名生成器生成bean长名称,无法实现属性读取 @Component("ipProperties...此处拦截所有请求,用户可以根据使用需要设置要拦截请求。甚至可以在此处加载IpCountProperties中属性,通过配置设置拦截器拦截请求。...本例中使用map保存数据,如果换用redis方案,在starter开发模块中就要导入redis对应starter 对于配置属性务必开启提示功能,否则使用者无法感知配置应该如何书写 到此当前案例全部完成...springboot初始化参数根据参数提供方,划分成如下3个大类,每个大类参数又被封装了各种各样对象,具体如下: 环境属性(Environment) 系统配置(spring.factories).../user GET-获取用户 DELETE-删除用户 PUT-修改用户 POST-保存用户 核心Filter:HiddenHttpMethodFilter 用法

    91711

    SpringMVC之常用注解

    url 支持占位符是 spring3.0 之后加入。是 springmvc 支持 rest 风格 URL 一个重要标志。 属性: value:用于指定 url 中占位符名称。...值得注意REST 并没有一个明确标准,而更像是一种设计风格。 它本身并没有什么实用性,其核心价值在于如何设计出符合 REST 风格网络接口。...PUT 等 method 并不支持,Spring3.0 添 加了一个过滤器,可以将浏览器请求改为指定请求方式,发送给我们控制器方法,使得支持 GET、POST、PUT与 DELETE 请求。...应用场景: 当表单提交数据不是完整实体类数据时,保证没有提交数据字段使用数据库对象原来数据。 例如: 我们在编辑一个用户时, 用户有一个创建信息字段,该字段值是不允许被修改。...属性: value:用于指定存入属性名称 type:用于指定存入数据类型。 7.2、使用示例 jsp 中代码: <!

    42710

    Spring认证中国教育管理中心-Spring Data Elasticsearch教程一

    Spring Data Elasticsearch 将支持它TransportClient,只要它在使用 Elasticsearch版本中可用,但自 4.0 版以来已弃用使用类。...Elasticsearch 对象映射 Spring Data Elasticsearch 对象映射是将 Java 对象(域实体)映射到存储在 Elasticsearch 中并返回 JSON 表示过程...Spring Data Elasticsearch 早期版本使用基于 Jackson 转换,Spring Data Elasticsearch 3.2.x 引入了Meta Model Object...使用 MappingElasticsearchConverternow 涵盖了所有这些情况。 6.1。元模型对象映射 基于元模型方法使用域类型信息来读取/写入 Elasticsearch。...映射字段名称 无需进一步配置,Spring Data Elasticsearch 将使用对象属性名称作为 Elasticsearch 中字段名称。

    68110

    快速学习-SpringMVC常用注解

    url 支持占位符是 spring3.0 之后加入。是 springmvc 支持 rest 风格 URL 一个重要标志。 属性: value:用于指定 url 中占位符名称。...在目前主流三种 Web 服务交互方案中,REST 相比于 SOAP(Simple Object Access protocol,简单对象访问协议)以及 XML-RPC 更加简单明了,无论是对 URL...值得注意REST 并没有一个明确标准,而更像是一种设计风格。它本身并没有什么实用性,其核心价值在于如何设计出符合 REST 风格网络接口。...示例 作用: 由于浏览器 form 表单只支持 GET 与 POST 请求,而 DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将浏览器请求改为指定请求方式...应用场景: 当表单提交数据不是完整实体类数据时,保证没有提交数据字段使用数据库对象原来数据。 例如: 我们在编辑一个用户时,用户有一个创建信息字段,该字段值是不允许被修改

    53810
    领券