Java Spring安全性:方法级安全性阻止对角色的访问

Java Spring安全性:方法级安全性阻止对角色的访问,java,spring,security,soap,spring-security,Java,Spring,Security,Soap,Spring Security,使用目前最新的SpringSecurity5.2.X,我需要阻止对SOAP服务中除一个方法之外的所有方法的第三方角色的访问。换句话说,我需要该特定角色在服务中的所有可用方法中只访问一个特定方法 通常,通常的方法级安全化包括带有@SecureMY_角色的注释。这使得该方法仅可供该角色访问 是否可以让Spring Security Core执行相反的操作。也就是说,将其配置为某个用户只能访问安全方法 当然,解决办法可以是: // Method accessible by anyone but thi

使用目前最新的SpringSecurity5.2.X,我需要阻止对SOAP服务中除一个方法之外的所有方法的第三方角色的访问。换句话说,我需要该特定角色在服务中的所有可用方法中只访问一个特定方法

通常,通常的方法级安全化包括带有@SecureMY_角色的注释。这使得该方法仅可供该角色访问

是否可以让Spring Security Core执行相反的操作。也就是说,将其配置为某个用户只能访问安全方法

当然,解决办法可以是:

// Method accessible by anyone but third party role
@Secured({"GOOD_ROLE1", "GOOD_ROLE2", "GOOD_ROLE3"})
public void methodAccessibleByAnyoneButThirdPartyRole(){
}

// Method accessible by anyone, including third party role
@Secured({"GOOD_ROLE1", "GOOD_ROLE2", "GOOD_ROLE3", "THIRD_PARTY_ROLE"})
public void methodAccessibleByAnyone(){
}
其他解决方法包括仅使用受限制的方法创建新服务


但是,是否有任何注释选项可以直接获得相同的结果?类似于@PreAuthorize!是否有角色“第三方角色”或类似角色?

根据Spring Security,您可以在@PreAuthorize中使用任何Spring表达式语言SpEL

表达式中提供了任何Spring EL功能,因此 还可以访问参数的属性。例如,如果你 想要一个特定的方法只允许访问 用户名与联系人的用户名匹配,您可以写

@PreAuthorizecontact.name==authentication.name 公共无效DoSomething联系人

因此,您可以使用:

@PreAuthorize("!hasRole('THIRD_PARTY_ROLE')")
也作为更具可读性的变体:

@PreAuthorize("not hasRole('THIRD_PARTY_ROLE')")

根据Spring安全性,您可以在@PreAuthorize中使用任何Spring表达式语言SpEL

表达式中提供了任何Spring EL功能,因此 还可以访问参数的属性。例如,如果你 想要一个特定的方法只允许访问 用户名与联系人的用户名匹配,您可以写

@PreAuthorizecontact.name==authentication.name 公共无效DoSomething联系人

因此,您可以使用:

@PreAuthorize("!hasRole('THIRD_PARTY_ROLE')")
也作为更具可读性的变体:

@PreAuthorize("not hasRole('THIRD_PARTY_ROLE')")