使用 GWT Requestfactory 的 Http 状态代码

发布于 2024-12-25 03:00:02 字数 83 浏览 1 评论 0原文

如果我使用 GWT Requestfactory,向客户端发送“404 未找到”或“401 未经授权”的推荐方式是什么?

问候安德烈亚斯

if I use the GWT Requestfactory, what is the recommended way to send a "404 not found" or "401 unauthorized" to the client?

Greetings Andreas

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

涫野音 2025-01-01 03:00:02

RequestFactory 是一种RPC 协议,而不是REST 协议。因此,首先,您不会发送“404 not found”:这意味着您的客户端应用程序甚至不知道如何与服务器通信。

至于“401 未经授权”,嗯,这取决于情况。

  • 如果你想保护整个RequestFactoryServlet的访问,那么在服务器端使用servlet过滤器来发送响应,并使用自定义的RequestTransport(最简单的是简单地在客户端扩展 DefaultRequestTransport)来捕获响应并采取相应的操作。
  • 如果您只想保护少数方法,或者仅允许特定用户访问某些方法(例如,仅允许管理员调用方法deleteThisThing),那么您有多种选择,但在所有情况下如果用户未经授权,则不想从客户端应用程序调用这些方法(例如,如果用户不是管理员,则不显示删除此内容按钮):
    • 在方法本身中执行此操作,并引发异常(您可以使用 RequestFactoryServlet.getThreadLocalRequest().getUserPrincipal() 获取当前用户)
    • 使用 ServiceLayerDecorator 在其中重写 invoke 方法来进行检查(可能基于方法本身的某些注释)并调用 report()< /code> 如果用户未获得授权

RequestFactory is an RPC kind of protocol, not a REST one. So, first, you won't send a "404 not found": that would mean your client app doesn't even know how to communicate with the server.

As for the "401 unauthorized", well, it depends.

  • if you want to protect the access to the RequestFactoryServlet as a whole, then use a servlet filter on the server-side to send the response, and use a custom RequestTransport (easiest is to simply extend DefaultRequestTransport) on the client side to catch the response and act accordingly.
  • if you want to protect only a few methods, or allow access to some methods only to specific users (e.g. only administrators are allowed to call method deleteThisThing), then you have several choices, but in all cases you don't want to ever call these methods from the client app if the user is not authorized (e.g. don't display a delete this thing button if the user is not an administrator):
    • do it in the method itself, throwing an exception (you can use RequestFactoryServlet.getThreadLocalRequest().getUserPrincipal() to get the current user)
    • use a ServiceLayerDecorator where you override the invoke method to do the check (possibly based on some annotation on the method itself) and call report() in case the user is not authorized
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文