【问题标题】:Bypass Spring Security @preauthorize绕过 Spring Security @preauthorize
【发布时间】:2013-10-13 22:59:51
【问题描述】:

我从 web 层调用以下方法抛出一个具有附加权限的登录用户:

@PreAuthorize("hasRole('list_users_permission')")
public List<UserDto> getAllUsers() {
    ........
}

但现在我想通过调度程序作业调用它,这意味着我没有登录用户。

有没有办法绕过这个注解 @PreAuthorize("hasRole('list_users_permission')") 或者创建一个具有所有必要权限的虚拟用户?

【问题讨论】:

  • 您的用户存储在哪里?调度程序是独立的应用程序吗?您可以将方法/类添加到包含安全方法的应用程序吗?您的安全配置在哪里获取凭据?
  • - 用户存储在数据库中- 调度程序不是一个独立的应用程序。它包含在同一个 Web 应用程序中。 - 安全方法是我在上面附加的方法。它只是从数据库中获取所有用户。

标签: java spring spring-security


【解决方案1】:

首先,将getAllUsers() 委托给非安全方法:

@PreAuthorize("hasRole('list_users_permission')")
public List<UserDto> getAllUsers() {
    return doGetAllUsers();
}

public List<UserDto> doGetAllUsers() {
    ...
}

然后让预定的代码调用doGetAllUsers()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2015-07-30
    • 2016-06-24
    • 2013-04-13
    • 2011-04-19
    相关资源
    最近更新 更多