如何将 URL 参数从 GWT 客户端发送到服务器端进行验证

Posted

技术标签:

【中文标题】如何将 URL 参数从 GWT 客户端发送到服务器端进行验证【英文标题】:How to send URL parameters from GWT client to Server side for validation 【发布时间】:2017-04-12 23:58:01 【问题描述】:

我正在改进现有的 GWT 项目,我正在使用 PING 添加身份验证。

这就是流程:

    用户输入应用程序 URL http://...../library-ui 我想使用 servlet 过滤器过滤所有 URL 并检查 URL 中的 code 参数,如果我没有在 URL 中看到 code 参数,我想将它们重定向到 PING 身份验证 URL。 一旦 PING 验证它会重定向到http://...../library-ui/?code=xxxxxx 此“代码”是获取与用户相关的 JwT 令牌所必需的

我在下面添加一个过滤器:

public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain filterChain) throws IOException, ServletException 

    HttpServletRequest httpRequest = (HttpServletRequest) request;
    System.out.println(httpRequest);
    String requestURI = httpRequest.getParameter("code");

    System.out.println(requestURI);
    if (!requestURI.contains("code")) 
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        httpResponse.sendRedirect("https://pingwebsite/as/authorization.oauth2?client_id=XXX&response_type=code");
    
    filterChain.doFilter(request, response);

但问题是我的请求 URI 没有代码参数。

System.out.println(requestURI); 打印 - library-ui。

一旦我从 URL 中获得代码,我就可以继续进行。

【问题讨论】:

这不会是安全的。您如何使用 OpenID Connect 库而不是在没有完全理解的情况下自行开发? redirect_uris 应该设置 cookie 和重定向。 在 URL 中我只获得 Auth 代码,这没有关于用户或令牌的任何信息。一旦我得到这个,我将调用后端服务器来获取实际的令牌。让我知道它是否仍然容易受到攻击,我是 GwT 世界的新手,任何指导都将不胜感激。 我建议您仔细查看tools.ietf.org/html/rfc6819 3 个问题:1)String requestURI = httpRequest.getParameter("code"); 这不是requestUri,它是代码参数,这实际上是你需要的。 2)if (!requestURI.contains("code")) 这不是正确的控制。你已经有了代码。您应该检查 not null 且不是空字符串 3) 在此 httpResponse.sendRedirect(..... 之后您没有返回语句,因此过滤器将继续处理请求,就好像它通过了控制一样。 【参考方案1】:

我能够解决这个问题,我必须使用 window.location 从浏览器获取详细信息并对服务器端执行 RPC 调用。然后,我必须使用授权码向 Jwt 令牌请求 PING 并对其进行验证。

【讨论】:

以上是关于如何将 URL 参数从 GWT 客户端发送到服务器端进行验证的主要内容,如果未能解决你的问题,请参考以下文章

GWT 将大量数据从服务器发送到客户端的最佳实践

如何使用 fileUpload 在 GWT 中将文件从客户端传输到服务器

使用 GWT RPC 序列化在 POST 中将对象从客户端发送到服务器

从 j2me 调用 GWT 方法

在 GWT 中创建 URL 参数

iText + RPC。如何将 PDF 从服务器发送到客户端