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