Spring security 如何使用SpringSecurity3.0.3来保护这样的业务逻辑?

Spring security 如何使用SpringSecurity3.0.3来保护这样的业务逻辑?,spring-security,Spring Security,我有这样的要求。有一个主业务对象,用户a和用户b,以及管理员。用户a或b可以创建/更新/删除自己的业务对象。用户a不能修改用户b的业务对象。管理员可以做任何事情。并且业务对象有一个状态,在某些状态下,即使所有者用户也不能修改它。我想通过SpringSecurity来确保这一点,但似乎仅仅通过基于角色的安全性就可以实现。我觉得我需要使用spring投票者,但我不知道如何配置。谁能提供一些代码剪贴或者给我一些建议 提前感谢。Spring Security 3支持@PreAuthorize注释,允许您

我有这样的要求。有一个主业务对象,用户a和用户b,以及管理员。用户a或b可以创建/更新/删除自己的业务对象。用户a不能修改用户b的业务对象。管理员可以做任何事情。并且业务对象有一个状态,在某些状态下,即使所有者用户也不能修改它。我想通过SpringSecurity来确保这一点,但似乎仅仅通过基于角色的安全性就可以实现。我觉得我需要使用spring投票者,但我不知道如何配置。谁能提供一些代码剪贴或者给我一些建议


提前感谢。

Spring Security 3支持@PreAuthorize注释,允许您在中表达授权逻辑,如下所示:

public class BusinessService {
    @PreAuthorize("hasRole('ADMINISTRATOR') or " + 
        "(#o.status != 'someStatus' and hasRole('USER') and #o.ownerName == principal.name)")
    public void updateBusinessObject(BusinessObject o) {
        ...
    }
}
您需要应用安全方面

如果表达式太复杂,无法用Spring表达式语言表示,则可以通过自定义将自定义变量添加到表达式中,将一些逻辑移到Java代码中

但是,请注意,您需要在调试模式下编译代码,以便在表达式中使用方法参数

另见:


谢谢,那太好了。但是我使用了@PreAuthorizehasRole'ROLE\u ADMIN'或task.status<3和hasRole'ROLE\u USER'。它不起作用。我以任务所有者的身份登录,任务的状态==3,但我仍然可以升级它task@Tom:确保正确应用了安全方面。@Tom:还请注意,由于这种方法使用Spring AOP,因此它仅适用于来自类外部的调用。我使用它来保护我的更新方法:@PreAuthorizehasPermissiontask、write或hasPermissiontask,管理创建任务时添加,使用以下代码创建ace:acl.insertacacacl.getEntries.size,BasePermission.DELETE,new-GrantedAuthoritySidROLE_-ADMIN,true;acl.insertacacl.getEntries.size,BasePermission.ADMINISTRATION,新授权的AuthoritySidRole\u ADMIN,true;acl.insertacacl.getEntries.size,BasePermission.WRITE,新授权的AuthoritySidRole\u ADMIN,true;但即使我以管理员用户身份登录,我仍然无法更新任务。@汤姆:对不起,我不熟悉ACL支持。