我应该在哪里验证用户是否有权访问资源?

时间:2019-02-05 02:50:02

标签: java authentication spring-security jwt

我正在用Java spring构建Rest API,以保护已基于JWT实现身份验证的端点。

我设置了一个过滤器,用于验证令牌并与角色一起恢复用户。到目前为止,这很好,但是我不知道应该在哪里实施基于用户和角色的授权。

例如: 如果x是管理员,则他/她可以命中任何端点 如果y是ID为1的用户,则她/他只能访问她/他的资源;例如/ user / 1 / books。

我倾向于在验证JWT的同一过滤器中进行此授权,但是,我将必须解析url以查找其是否到达正确的端点。另一种可能性是直接在控制器中实现,但是我不喜欢这种方法,因为我觉得这压倒了控制器的业务逻辑。

感谢和问候

1 个答案:

答案 0 :(得分:1)

由于您标记了“ spring-security”,因此我认为您正在使用它;-)。

您可以使用很多spring内置检查来执行预先验证的检查。您可以在服务注释中使用@PreAuthorize @PostAuthorize和EL检查。 我认为spring会将其用作附加的过滤器链,但我不完全知道。如果未成功执行检查,spring将返回4xx状态代码。

@PreAuthorize("@someBean.someCheck(authentication)")
public void yourServiceMethod(...)

(认证对象由spring映射)

public boolean someCheck(Authentication auth)

另请参阅: