考虑向 Controller 发出 GET 请求,然后 Controller 从数据库加载资源。想象数据库资源有一个标志。该标志设置资源是否是公共(public)的。如果资源标志为 true,则返回资源。如果资源公共(public)标志设置为 false,则检查传入用户是否是该资源的正确所有者。如果用户不属于这种情况,请发送 401。
如何配置 Spring Security 来解决此用例?
最佳答案
正如前面提到的,您可以使用@PostAuthorize
。
例如,假设您有一个服务方法,该方法返回一个具有 publicFlag
和 owner
字段的 DatabaseResource
,则以下代码将抛出AccessDeniedException
如果 publicFlag == false
且 owner !=authentication.name
。
@PostAuthorize("returnObject.publicFlag == true
|| returnObject.owner == authentication.name")
public DatabaseResource returnResource() {
// load the resource...
return databaseResource;
}
关于java - 当 SpringSecurity 找不到传入 token 时,阻止 SpringSecurity 发送自动 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122181/