gpt4 book ai didi

java - Spring Data Rest存储库的安全方法

转载 作者:行者123 更新时间:2023-12-02 08:55:13 24 4
gpt4 key购买 nike

我目前正在开发一个基于Spring Boot的REST API服务器。借助 Spring Data Rest,10 个左右的实体可以通过一个简单的存储库轻松拥有自己的 Controller ( @RepositoryRestResourceJpaRepositoryJpaSpecificationExecutor )。现在我需要将安全控制与 @PreAuthorize 集成.

这里的问题是我应该在哪个方法上添加注释来限制 GET/POST/等?

比如我限制delete的权限,它对deleteById有类似的影响吗? , deleteInBatch , deleteAll ?我在文档中看到导出的注释放在 deleteById 上和delete没有任何进一步的解释,这让我很困惑。

最佳答案

For example, if I limit the permission of delete, does it affect similarly on deleteById, deleteInBatch, deleteAll?

据我所知:没有。检查此示例代码,其中已授权搜索,但删除严格限于管理员:

public interface RecordRepository<T extends Record> extends MongoRepository<T, String> {

// paginated queries
@RestResource(path = "names", rel = "name")
public Page<T> findByName(@Param("name") String name, Pageable pageable);
@RestResource(path = "types", rel = "types")
public Page<T> findByTypeIn(@Param("type") List<String> types, Pageable pageable);

// restrict delete operations to administrators only

@PreAuthorize("hasRole('ADMIN')")
@Override
void deleteById(String id);

@PreAuthorize("hasRole('ADMIN')")
@Override
void delete(T entity);

@PreAuthorize("hasRole('ADMIN')")
@Override
void deleteAll(Iterable<? extends T> records);

@PreAuthorize("hasRole('ADMIN')")
@Override
void deleteAll();
}

话虽这么说,如果您的目的是将删除限制为仅限管理员,则可以扩展 WebSecurityConfigurerAdapter并将其配置为阻止所有 http DELETE 请求:

public class WebSecurityBaseConfiguration extends WebSecurityConfigurerAdapter {
...

@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(HttpMethod.DELETE).hasRole("ADMIN");
}

}

请注意,这是一个快速而肮脏的复制粘贴,可能无法开箱即用(您可能需要配置 role hierarchy )。

关于java - Spring Data Rest存储库的安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60530908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com