2016-05-25 6 views
0

Ich habe ein Servlet, das Captcha auf meiner JSP-Seite generiert, aber viele Zeit habe ich Null von diesem Servlet und ungültige Captcha Fehler bekommen, ich habe viel versucht, aber immer noch nicht wissen, warum ich das hier bekomme mein captcha ist ServletServlet Return Null Stream für Captcha

public class CaptchaServlet extends HttpServlet { 


    protected void processRequest(HttpServletRequest request, 
           HttpServletResponse response) 
       throws ServletException, IOException { 

    int width = 200; 
    int height = 42; 

    char data[] = RandomStringUtils.randomNumeric(4).toLowerCase().toCharArray(); 


    BufferedImage bufferedImage = new BufferedImage(width, height, 
        BufferedImage.TYPE_INT_RGB); 

    Graphics2D g2d = bufferedImage.createGraphics(); 

    Font font = new Font("Georgia", Font.BOLD, 18); 
    g2d.setFont(font); 

    RenderingHints rh = new RenderingHints(
      RenderingHints.KEY_ANTIALIASING, 
      RenderingHints.VALUE_ANTIALIAS_ON); 

    rh.put(RenderingHints.KEY_RENDERING, 
      RenderingHints.VALUE_RENDER_QUALITY); 

    g2d.setRenderingHints(rh); 

    GradientPaint gp = new GradientPaint(0, 0,new Color(144, 46, 54), 0, height/2, new Color(144, 46, 54), true); 

    g2d.setPaint(gp); 
    g2d.fillRect(0, 0, width, height); 

    g2d.setColor(Color.white); 

    Random r = new Random(); 

    String captcha = String.copyValueOf(data); 
    System.out.println("In captcha Servlet :- "+captcha); 
    request.getSession().setAttribute("captcha", captcha); 

    int x = 0; 
    int y = 0; 

    for (int i=0; i<data.length; i++) { 
     x += 35 + (Math.abs(r.nextInt()) % 5); 
     y = 20 + Math.abs(r.nextInt()) % 5; 
     g2d.drawChars(data, i, 1, x, y); 
    } 

    g2d.dispose(); 

    response.setContentType("image/png"); 
    ByteArrayOutputStream os = new ByteArrayOutputStream(); 
    ImageIO.write(bufferedImage, "png", os); 
    byte[] bytes = os.toByteArray(); 
    ServletOutputStream out = response.getOutputStream(); 
    out.write(bytes); 
    os.close(); 
    } 


    protected void doGet(HttpServletRequest request, 
         HttpServletResponse response) 
          throws ServletException, IOException { 
     processRequest(request, response); 
    } 


    protected void doPost(HttpServletRequest request, 
         HttpServletResponse response) 
          throws ServletException, IOException { 
     processRequest(request, response); 
    } 
} 

unten ist mein jsp Code

<div id="captcha_div"> 
<img id="captcha_img" src="<%=appContext%>/CaptchaServlet" 
style="float: left; width: 70%; margin-top: 2%;"> 
<div style="padding-top: 5%; margin-left: 73%"> 
<button class="refresh" onclick="javascript:regenImage();"type="button"> 
</button></div></div> 

i-Check captcha-Code und Benutzer-Code in einem anderen Servlet wie

eingegeben
  String code = request.getParameter("code"); 
      String captcha = (String) session.getAttribute("captcha"); 
      if (captcha != null && code != null) { 
       if (captcha.equals(code)) { 
        isValid = true; 
       } 
      } 

Ich bekomme selten Null, eine Situation, die ich reproduzieren ist wie wenn die Login-Seite für 10,20 Minuten ideal ist ich bekomme Wert von Captcha ist null und deswegen habe ich ungültige Capcha Fehler können Sie mir bitte sagen, warum ich null oder was ich falsch in meinem Code getan habe Danke ...

Antwort

0

Können Sie bitte Ihren ProcessRequest-Code innerhalb versuchen fangen und auch überprüfen, was in den Protokollen für unter Code während der Anforderung drucken.

String captcha = String.copyValueOf(data); 
System.out.println("In captcha Servlet :- "+captcha); 
request.getSession().setAttribute("captcha", captcha); 
+0

Danke für die Antwort lassen Sie mich überprüfen ... –