首页 文章

iText GAE:如何创建随机网址?

提问于
浏览
0

对不起,我的英语不好。我在 GAE GWT 中使用 iText ..我做了一个示例应用程序,它在谷歌工作!但是我对 URL 的标记有问题。

我有这个 RPC 服务,它在字节数组中创建 Document 并在 HttpSession 中写入,然后在客户端 onSuccess 块中调用一个 Servlet,它向客户端发送 PDF。 String token = "258958395ai53"是客户端找到 PDF 的令牌,但在此示例中,y 使令牌成为静态,因此我需要随机创建令牌并确保令牌不重复。这是 de code。

RPC 服务:

public String getPdf() {
    Document document = new Document();
    String token = "258958395ai53";
    // generate test PDF
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfWriter.getInstance(document, baos);
        document.open();
        document.add(new Paragraph("¡HOLA PUTO MUNDO!"));
        document.close();
        byte[] pdf = baos.toByteArray();
        HttpServletRequest request = this.getThreadLocalRequest();
        HttpSession session = request.getSession();
        session.setAttribute(token, pdf);

    } catch (Exception e) {

        System.out.println("ReportServlet::generatePDF::Exception "
                + e.getMessage());
    }

    return token;
}

Servlet 的:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        // create output stream from byte array in session
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        String token = request.getParameter("token");
        byte[] pdf = (byte[]) request.getSession().getAttribute(token);
        baos.write(pdf);

        // setting some response headers
        response.setHeader("Expires", "0");
        response.setHeader("Cache-Control", "must-revalidate, post-check=0,pre-check=0");
        response.setHeader("Pragma", "public");

        response.setContentType("application/pdf");

        // content length is needed for MSIE
        response.setContentLength(baos.size());

        // write ByteArrayOutputStream to ServletOutputStream
        ServletOutputStream out = response.getOutputStream();
        baos.writeTo(out);
        out.flush();
        out.close();
}

onSuccess:

public void onSuccess(String lista) {
                    String token =  lista;
                    //Window.open("hello?token="+ token, "_blank","menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes");
                    Dialog d = new Dialog();
                    d.setWidth(500);
                    d.setHeight(700);
                    d.setUrl(GWT.getModuleBaseURL()+"hello?token="+token);
                    d.show();
                }
            });

任何的想法? ..可以查看我的例子http://pdfprueba2.appspot.com/

1 回答

  • 0

    您可以使用随机生成器。有更多高级随机生成器可用,例如 SecureRandom(参见这里它是如何工作的)。除此之外,您还可以组合多个独特元素来创建超级唯一键。 这个文章概述了创建此类事物时使用的一些方法。

    考虑到您添加的复杂性越多,它就会越多 resources/time。

相关问题