使用@PreAuthorize(hasRole(...))和使用requestMatchers(...).hasRole(...)有什么区别?对安全有影响吗?什么是更好的使用?
我看到两种解决方案都被使用,所以我不知道哪一种更好。
@GetMapping("/companies")
@PreAuthorize("hasAnyRole('USER','ADMIN')")
public ResponseEntity<CompanyDto> getCompanyById(@PathVariable("companyId") Long companyId) {
CompanyDto companyDto = companyService.getCompanyById(companyId);
return new ResponseEntity<>(companyDto, HttpStatus.OK);
}
字符串
或者是
安全配置
.requestMatchers(HttpMethod.GET, "/companies").hasAnyAuthority(ADMIN, USER)
型
1条答案
按热度按时间velaa5lx1#
@PreAuthorize
是一个方法级安全注解,定义在相应的documentation中:用于指定方法访问控制表达式的注解,该表达式将被评估以决定是否允许方法调用。
另一方面,使用
requestMatchers
是在HTTP安全配置中完成的(如securityFilterChain
示例所示)!一般来说,它根据特定的模式或类似的模式来匹配传入的请求,例如具有角色的请求的安全约束-因此,requestMatchers().hasRole()
在HTTP请求时进行评估,甚至在调用控制器方法之前!@PreAuthorize
更好。requestMatchers().hasRole()
更容易。通常情况下,两者的结合是有用的。例如,
requestMatcher
用于保护一般端点,然后@PreAuthorize
用于更复杂的检查。