1

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

现在我的问题:

  1. 覆盖 ReqeustFactoryServlet 的方法是否正确?
  2. 如何找出 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);
    }
}
4

1 回答 1

1

解决方案是RequestFactoryServlet使用您的ServiceLayerDecorator.

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

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

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

于 2013-06-10T21:53:28.710 回答