Tak*_*aks 5 java spring spring-security
我正在实施一个应用程序,该应用程序具有一些访问完全基于权限的方法。权限是使用 Spring 实现的。使用@PreAuthorize注释在方法之上添加权限。问题是我希望在注释中有完全自定义的方法 (EL)。所以我想实现的是:
@PreAuthorize("customAllowThis()")
public void foo() { }
Run Code Online (Sandbox Code Playgroud)
我认为有两种方法:
方法 1:尝试覆盖SecurityExpressionRoot并在那里添加我的自定义方法。我将在不同的方法上使用多个授权服务,因此将所有特定方法都放在 SecurityExpressionRoot 中会造成很大的混乱。
方法 2:创建服务并将方法放在那里:
@Component
public class AuthorisationService {
public boolean allowThis() {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
并执行以下操作:
@PreAuthorize("@authorisationService.customAllowThis()")
public void foo() { }
Run Code Online (Sandbox Code Playgroud)
我更喜欢方法 2,尽管它看起来像绕过 Spring 的“自然顺序”。在如何处理这种情况方面是否有任何好的/最佳做法?关键是我不想将所有特定方法都放在一个类中,但另一方面我不想做一些“肮脏”的事情。
小智 2
为此,您可以执行以下操作:
创建一个接受一系列允许的角色的自定义注释,如下所示:
@Allows({RoleEnum.ROLE1, RoleEnum.ROLE2 })
使用 SPeL,我们可以调用一个自定义方法来检查用户是否具有这些角色,如下所示:
@PreAuthorize("myServiceClass.hasRoles(#roles)")
在服务类中,您只需根据 OAuth 数据库中的角色验证用户角色,并在服务中执行任何业务逻辑。
| 归档时间: |
|
| 查看次数: |
11368 次 |
| 最近记录: |