我目前正在开发将部署在 Google App Engine 上的 GWT 2.1 应用程序。我想使用新的 RequestFactory 实现服务器通信。
现在我的问题是如何处理这种情况下的细粒度安全问题?某些服务器操作(在 RequestContext stub 中声明的那些操作)应仅限于某些用户(可能取决于远程调用的参数)。如果调用未经授权,我希望客户端显示一个登录页面(例如,这样一个人可以以不同的用户身份登录)。
从 Expenses 示例中,我知道如何实现到登录页面的自动重定向,但在这个示例中,安全模型非常简单:当且仅当用户登录时,客户端才可以访问 servlet .
我应该在服务器端服务中引发自定义 UnAuthorizedException 吗?我应该在哪里拦截这个异常? (我可以在像费用示例的 GaeAuthFilter 这样的 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 来绕过登录页面的用户。
关于security - 如何使用 GWT 2.1 的 RequestFactory 处理安全约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4557286/