java - 如何在 Spring Boot 的每个 REST 调用中使用 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/*
。但是,我的用例如下。
在每个休息调用中,我们在标头中传递用户 ID。我想在每个 rest 调用中使用 spring security,并使用标题中的用户 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 Inconfigure
方法来限制URL
基于 的访问,而是在要保护的类或方法上方Roles
使用注释。@PreAuthorize and @PostAuthorize
这种方式为您的限制政策提供了更大的灵活性。
https://www.baeldung.com/spring-security-method-security中的示例也可以帮助您。
推荐阅读
- opencl - 设备端入队导致 CL_OUT_OF_RESOURCES
- python - 替换函数不再适用于 Python 中的字符串
- arrays - ReactJs更新相似属性值的状态
- selenium-webdriver - 无法通过 Selector 和 chromedriver 提取linkedin的用户名
- java - 需要帮助从 Java 中 JSON 格式的 API 响应定义变量
- java - 检查字符串是否为有效的 EL 表达式(Java)
- javascript - 如何解决 JS Table 中日期排序的 mData 错误?
- python - 初学者程序员试图在 python 中绘制方程
- android - firestore的onFailureListener在什么情况下会触发
- sql - SQL Server 计数和分组依据特定问题