【发布时间】:2017-02-11 07:47:49
【问题描述】:
在我的 Spring Security 项目中,我有一个使用 @PreAuthorize 注释保护的以下方法:
@PreAuthorize("hasAnyAuthority('PERMISSION_UPDATE_OWN_DECISION', 'PERMISSION_UPDATE_ANY_DECISION')")
@RequestMapping(value = "/{decisionId}/update", method = RequestMethod.POST)
public DecisionResponse updateDecision(@PathVariable @NotNull @DecimalMin("0") Long decisionId, @Valid @RequestBody UpdateDecisionRequest decisionRequest) {
....
}
我还将 Spring OAuth2 与 JWT 令牌一起使用,并将所有权限存储在此令牌中。现在,我使用了很长的权限名称,例如 PERMISSION_UPDATE_OWN_DECISION,并希望替换它们以显着减少 JWT 令牌大小(权限部分)。
其中一个想法是引入权限代码,例如:
1, PERMISSION_UPDATE_OWN_DECISION
2, PERMISSION_UPDATE_ANY_DECISION
其中1 是权限代码,PERMISSION_UPDATE_OWN_DECISION 是权限名称。
但我不想直接使用这些代码,因为它会降低我的代码的可读性,例如:
@PreAuthorize("hasAnyAuthority('1', '2')")
我想使用一些允许我根据真实权限名称检索此代码的东西,例如:
@PreAuthorize("hasAnyAuthority(getCode('PERMISSION_UPDATE_OWN_DECISION')), getCode('PERMISSION_UPDATE_ANY_DECISION'))")
如何使用 Spring Security 和 Spring Security Expressions 正确实现这一点?可能有一些预先构建的方法来实现这一点?
【问题讨论】:
标签: java spring spring-security jwt spring-security-oauth2