繁体   English   中英

如何在 Spring Boot 的每个 REST 调用中使用 spring security?

[英]How to use spring security in each REST call in Spring Boot?

我试图了解是否有一种方法可以使用 Spring Security 来帮助我的用例。 基本上,我想在 spring boot 中的每个 REST 调用上调用 spring security,而不是在应用程序启动期间调用一次,并找到用户的角色并根据用户角色进一步限制端点。

我有 3 个不同的休息控制器,即/admin1/*/admin2/*/admin3/*
我试过手动限制端点,如下所示。

http.authorizeRequests()
        .antMatchers("/admin1/**").permitAll()
        .and()
    .authorizeRequests()
        .antMatchers("/admin2/**").permitAll()
    .anyRequest().authenticated();

这实际上将允许/admin1/*/admin2/* API 工作并限制/admin3/* 但是,我的用例如下。

在每个 rest 调用中,我们在标头中传递用户 ID。 我想在每次休息调用时使用 spring 安全性,并使用标头中的用户 ID 从数据库中查找用户角色。

如果用户具有ADMIN 1用户角色,我们只需启用/admin1/*端点并限制/admin2/*/admin3/* 同样,如果用户具有ADMIN 2用户角色,我们只需启用/admin2/*端点并限制/admin1/*/admin3/* 同样,如果用户具有ADMIN 3用户角色,我们只需启用/admin3/*端点并限制/admin1/*/admin2/*

有没有办法使用spring security来实现这一点?

谢谢

据我了解,您希望在每次通话时对用户进行身份验证和授权。 真的?

一种方法是使用 JWT(JSON Web 令牌)标记您的 REST API。

https://dzone.com/articles/spring-boot-security-json-web-tokenjwt-hello-world 中的示例可能会有所帮助。

我还建议,不要使用 antMatchers 在configure方法中基于Roles限制URL访问,而是在要保护的类或方法上方使用@PreAuthorize and @PostAuthorize注释。 这种方式为您的限制策略提供了更大的灵活性。

https://www.baeldung.com/spring-security-method-security 中的示例也可以帮助您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM