GWT 请求工厂的 ACL

Posted

技术标签:

【中文标题】GWT 请求工厂的 ACL【英文标题】:ACLs for GWT Request Factory 【发布时间】:2013-06-10 15:38:48 【问题描述】:

我想将 ACL 应用于通过我的请求工厂的所有请求。因此,我重写了 RequestFactoryServlet 及其 doPost()-Methode。现在我可以从会话中获取用户,检查他是否登录等等。 但我也想检查他的权限,只允许用户调用特定的方法。因此,例如只有管理员用户可以调用方法,这些方法将数据写入数据库。

现在我的问题:

    覆盖 ReqeustFactoryServlet 的方法是否正确? 我怎样才能知道在 RequestFactoryServerlet 中调用了哪个方法?有一种方法可以从请求中读取一些东西:String jsonRequestString = RPCServletUtils.readContent(request, JSON_CONTENT_TYPE, JSON_CHARSET); 但它只提供了一个非常神秘的字符串。

我的代码如下所示:

public class MyRequestFactoryServlet extends RequestFactoryServlet 

    @Override
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws IOException, ServletException 

        HttpSession session = getThreadLocalRequest().getSession();
        User user = (User)session.getAttribute("user");

        // check rights for user and only allow some methods

        super.doPost(request, response);
    

【问题讨论】:

【参考方案1】:

解决方案是使用您的ServiceLayerDecorator 创建标准RequestFactoryServlet

在您的ServiceLayerDecorator 中,您可以覆盖invoke 方法。

http://google-web-toolkit.googlecode.com/svn/javadoc/2.2/com/google/gwt/requestfactory/server/ServiceLayerDecorator.html

但是我更喜欢直接在业务对象中执行 ACL。

【讨论】:

但是如何在 ServiceLayerDecorator 中访问我的用户对象(存储在会话上下文中)? 同servlet:RequestFactoryServlet.getThreadLocalRequest().getSession().getAttribute("user") 谢谢,我不知道你能做到!

以上是关于GWT 请求工厂的 ACL的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 HttpClient 发送 GWT-RPC 请求?

GWT 客户端 RPC 请求序列化

GWT 中的 HTTP 请求

GWT:如何使用 JSON 发送 POST 跨域请求

GWT-RPC:对请求有效负载的黑客攻击

GWT:向服务器发出请求后继续编辑同一对象