spring - 在 @PreAuthorize 中使用请求标头值
问题描述
是否可以在@PreAuthorize 中使用请求标头值?
在我的应用程序中,所有请求都包含一个自定义标头,我需要将其与用户角色一起使用,以确定是否应允许它们访问控制器。
如果有人手动指定标头是可以的,因为这不会是安全问题,因为最终角色将控制它。但是我需要用它来减少在每个控制器方法中手动检查的次数。
谢谢你,马特
解决方案
1 - 如果您只在少数地方使用它,这可能是最快的方法。
@GetMapping(value = "/private-api-method")
@PreAuthorize("#request.getHeader('header-name') == 'localhost:8080'")
public ResponseEntity<String> privateApiMethod(HttpServletRequest request) {
return ResponseEntity.ok("OK!");
}
OR
@GetMapping(value = "/private-api-method")
@PreAuthorize("#header == 'localhost:8080'")
public ResponseEntity<String> privateApiMethod(@RequestHeader("header-name") String header) {
return ResponseEntity.ok("OK!");
}
2 - 如果您将在许多地方使用它,这可能是最好的方法。(在 中SecurityServise
,您可以添加多种不同的检查方法。)
@GetMapping(value = "/private-api-method")
@PreAuthorize("@securityService.checkHeader(#request)")
public ResponseEntity<String> privateApiMethod(HttpServletRequest request) {
return ResponseEntity.ok("OK!");
}
3 - 您可以为自己选择一种特殊的方法
推荐阅读
- maven - 如何让 Intellj 使用我的环境变量?
- javascript - jQuery UI 可拖拽和droppable 需要点击两次才能得到拖拽div
- xml - 在 Freemarker 中使用 NetSuite 日期
- ios - 从 Firebase Swift 下载时的函数循环
- python - 根据前几行在 pandas 数据框中填写日期
- javascript - 带有卡片问题的 Tailwind Flex Box 响应式网格
- javascript - 如何防止添加到主屏幕 pwa 在网站的 www 版本上再次提示?
- c - 我的 Makefile 中的 rm -f 命令不起作用
- html - 使用 CSS 对两行中的元素进行排序
- azure-devops - 如何自动用较新的版本替换/拒绝待处理的版本?