java - 当 SpringSecurity 找不到传入 token 时,阻止 SpringSecurity 发送自动 401

标签 java spring spring-security

考虑向 Controller 发出 GET 请求,然后 Controller 从数据库加载资源。想象数据库资源有一个标志。该标志设置资源是否是公共(public)的。如果资源标志为 true,则返回资源。如果资源公共(public)标志设置为 false,则检查传入用户是否是该资源的正确所有者。如果用户不属于这种情况,请发送 401。

如何配置 Spring Security 来解决此用例?

最佳答案

正如前面提到的,您可以使用@PostAuthorize

例如,假设您有一个服务方法,该方法返回一个具有 publicFlagowner 字段的 DatabaseResource,则以下代码将抛出AccessDeniedException 如果 publicFlag == falseowner !=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/

相关文章:

java - LoaderManager 不接受 'this'

java - Vagrant:转发端口不起作用

java - Spring属性优先

java - 我如何对 spring security @PreAuthorize 自定义表达式进行单元测试

java - Spring Security如何在用户注册时为用户设置角色

java - 如何在应用程序屏幕中央显示加载对话框?

java - 具有可变延迟的 ScheduledExecutorService

java - 用户登录后访问登录页面,如何重定向到首页?

java - 我想在 Ubuntu 12.04LTS 中制作直接执行 jar 文件的 sh 文件

java - Elasticsearch-忽略持久化的属性