0

在我当前的项目中,我们有一组受基于方法的安全性保护的服务类。

现在在某些情况下,“系统”需要自己调用安全方法。(例如:用户离开频道并且频道被隐式关闭,因为它是空的。通常“关闭”受到保护)。

如何同时以安全和不安全的方式提供对服务类的访问?

编辑 - 简短的例子

在身份验证期间,系统会检查此处是否对用户进行了主动禁止。

public User authenticate(String name, String token) throws BadCredentialsException, RuntimeException {
    User user = get(name);
    if (user == null || !user.getToken().equals(token)) {
        throw new BadCredentialsException("Invalid Project/Username/Password");
    }
    Ban userBan = banService.getBanForUser(user);
    if (userBan != null) {
        throw new UserBannedException("User was baned", userBan);
    }
    return user
}

但是对任何禁令的访问都受到基于方法的安全性保护,因此并非每个用户都可以“获取”它们。

@PreAuthorize("isAuthenticated()")
public Ban getBanForUser(User user) {
    return ...
}

所以基本上我需要两种方法来访问这个方法。一个受spring-security inteceptor保护(对于“用户”)和一个不受保护(对于“系统”)。

如果没有包装类,继承魔法,这是否可能......

如果我可以定义两个具有相同类的spring bean,一个带有spring-security,一个不带spring-security,那就太好了。

4

1 回答 1

1

一个解决方案(当然不是什么优雅的东西)是在调用受保护的方法之前模拟超级用户的身份验证。像这样的东西:

SecurityContextHolder.getContext().setAuthentication(privileged user here);    
Ban userBan = banService.getBanForUser(user);
SecurityContextHolder.getContext().setAuthentication(null);
于 2012-05-31T14:59:19.747 回答