Security 如何使用GWT2.1'处理安全约束;什么是工厂?

Security 如何使用GWT2.1'处理安全约束;什么是工厂?,security,google-app-engine,authentication,gwt,servlets,Security,Google App Engine,Authentication,Gwt,Servlets,我目前正在开发一个GWT2.1应用程序,该应用程序将部署在Google App Engine上。我想使用新的RequestFactory实现服务器通信 现在我的问题是如何在这种情况下处理细粒度安全问题?某些服务器操作(在RequestContext存根中声明的操作)应限于某些用户(可能取决于远程调用的参数)。如果一个呼叫未经授权,我希望客户端显示一个登录页面(例如,一个用户可以作为其他用户登录) 从示例中,我知道如何实现登录页面的自动重定向,但在本例中,安全模型非常简单:当且仅当用户登录时,才允

我目前正在开发一个GWT2.1应用程序,该应用程序将部署在Google App Engine上。我想使用新的RequestFactory实现服务器通信

现在我的问题是如何在这种情况下处理细粒度安全问题?某些服务器操作(在RequestContext存根中声明的操作)应限于某些用户(可能取决于远程调用的参数)。如果一个呼叫未经授权,我希望客户端显示一个登录页面(例如,一个用户可以作为其他用户登录)

从示例中,我知道如何实现登录页面的自动重定向,但在本例中,安全模型非常简单:当且仅当用户登录时,才允许客户端访问servlet


我应该在服务器端服务中提出自定义未授权异常吗?我应该在哪里拦截此异常?(我可以在一个servlet过滤器中这样做吗?

我也在寻找解决方案,并提出了以下建议。它不能完全处理用户界面方面的事情(即重定向到登录页面),但它将保护您的数据层不受未经授权的访问

public class MyRequestFactoryServlet extends RequestFactoryServlet
{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException
    {
        if (! userIsLoggedIn(req))
        {
            throw new ServletException("not logged in");
        }
        else
        {
            super.doPost(req, res);
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {
        if (! userIsLoggedIn(req))
        {
            throw new ServletException("not logged in");
        }
        else
        {
            super.doGet(req, res);
        }
    }

    protected boolean userIsLoggedIn(HttpServletRequest req)
    {
        // insert your custom code here for checking session for valid login token
        User user = (User) req.getSession().getAttribute("LOGGED_IN_USER");
        return user != null && user.isEnabled();
    }
然后在web.xml中使用MyRequestFactoryServlet而不是RequestFactoryServlet


为了处理登录的UI方面,我让我的应用程序的登录页使用GWT RPC检查有效登录;如果用户未登录,系统会提示用户输入用户名/密码。上面的代码保护后端不受试图通过直接跳转到其他URL或手动将数据发布到servlet来绕过登录页面的用户的影响。

感谢您的回复。我想知道在Android上使用相同的RF时,这将如何实现?我在android下使用相同的RequestFactorys和对象,我不知道如何设置会话属性。你处理好了吗?