我想在基于 JAX-RS 的应用程序中创建一个授权过滤器。
该过滤器将识别由 HTTP 请求 URI 引用的资源类。资源将具有可能的角色和操作的自定义注释。
根据所引用的类,过滤器将决定对该资源允许的可能操作。
因此,确定 JAX-RS 将执行哪些资源和方法的机制是什么?
我认为您要寻找的是 ContainerRequestFilter。这将允许您拦截每个请求并通过验证访问密钥或您用来识别用户授权的任何方法来授权请求。这是在 Jersey 中使用ContainerRequestFilter的示例,尽管我在 JAX-RS 文档中看到此过滤器定义,因此它可能在其他实现中。
不知道确切的要求,很难推荐一种特定的方法来管理角色和批准的使用,这也可能在很大程度上取决于您的角色可能有多复杂。如果角色非常静态,您可能需要考虑使用注释来标记受保护的端点并依靠代码来指示访问。您也许还可以使用注释来绑定数据库中的键/角色(注释参数将允许更大的灵活性)。无论您选择什么,我都不会将其完全编码在过滤器中。
由于我提到了注释,这里有一些关于如何在代码中搜索注释的建议。Spring 还将帮助您对任何 Spring Bean 执行此操作。
编辑:我差点忘了,您还可以检查您的休息服务类中的 JAX-RS 注释,这将是确定基于 uri 调用哪个类的一种方法。我想可能还有另一种方式来解决这个问题,但我现在不记得了。