You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2014/09/02 01:44:51 UTC
git commit: TAP5-1934: Kaptcha Component throws NPE after session is
expired
Repository: tapestry-5
Updated Branches:
refs/heads/master df93764ad -> 268f06c89
TAP5-1934: Kaptcha Component throws NPE after session is expired
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/268f06c8
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/268f06c8
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/268f06c8
Branch: refs/heads/master
Commit: 268f06c89ac02f4a4f771ced23699f3de74edfd0
Parents: df93764
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Mon Sep 1 16:45:01 2014 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Mon Sep 1 16:45:01 2014 -0700
----------------------------------------------------------------------
.../kaptcha/components/KaptchaImage.java | 64 ++++++++++++++------
1 file changed, 44 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/268f06c8/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaImage.java
----------------------------------------------------------------------
diff --git a/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaImage.java b/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaImage.java
index cca4bfb..973a801 100644
--- a/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaImage.java
+++ b/tapestry-kaptcha/src/main/java/org/apache/tapestry5/kaptcha/components/KaptchaImage.java
@@ -1,5 +1,3 @@
-// Copyright 2011, 2012 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -17,16 +15,21 @@ package org.apache.tapestry5.kaptcha.components;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.Link;
import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.SupportsInformalParameters;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.kaptcha.services.KaptchaProducer;
+import org.apache.tapestry5.services.HttpError;
import org.apache.tapestry5.services.Response;
import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.OutputStream;
+import java.io.InputStream;
/**
* Part of a Captcha based authentication scheme; a KaptchaImage generates a new
@@ -84,24 +87,45 @@ public class KaptchaImage
return false;
}
- void onImage() throws IOException
+ Object onImage() throws IOException
{
- BufferedImage image = producer.createImage(captchaText);
-
- response.setDateHeader("Expires", 0);
- // Set standard HTTP/1.1 no-cache headers.
- response.addHeader("Cache-Control", "no-store, no-cache, must-revalidate");
- // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
- response.addHeader("Cache-Control", "post-check=0, pre-check=0");
- // Set standard HTTP/1.0 no-cache header.
- response.setHeader("Pragma", "no-cache");
-
- OutputStream stream = response.getOutputStream("image/jpeg");
-
- ImageIO.write(image, "jpg", stream);
-
- stream.flush();
+ if (captchaText == null)
+ {
+ return new HttpError(HttpServletResponse.SC_NOT_FOUND, "Session expired.");
+ }
+
+ return new StreamResponse()
+ {
+ @Override
+ public String getContentType()
+ {
+ return "image/jpeg";
+ }
+
+ @Override
+ public InputStream getStream() throws IOException
+ {
+ BufferedImage image = producer.createImage(captchaText);
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ ImageIO.write(image, "jpg", baos);
+
+ return new ByteArrayInputStream(baos.toByteArray());
+ }
+
+ @Override
+ public void prepareResponse(Response response)
+ {
+ response.setDateHeader("Expires", 0);
+ // Set standard HTTP/1.1 no-cache headers.
+ response.addHeader("Cache-Control", "no-store, no-cache, must-revalidate");
+ // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
+ response.addHeader("Cache-Control", "post-check=0, pre-check=0");
+ // Set standard HTTP/1.0 no-cache header.
+ response.setHeader("Pragma", "no-cache");
+ }
+ };
- stream.close();
}
}