• Struts+spring使用随机验证码


    struts-config.xml

    <form-bean name="checkForm" type="org.apache.struts.validator.DynaValidatorForm">
    <form-property name="rand" type="java.lang.String" />
    </form-bean>
    <action
    attribute="checkForm"
    input="/check/check.jsp"
    name="checkForm"
    path="/check"
    scope="request"
    validate="true"
    type="com.yourcompany.struts.action.CheckAction">
    <forward name="ok" path="/check/checkok.jsp" />
    </action>

    validation.xml

    <form name="checkForm">
    <field property="rand" depends="required">
    <arg key="checkForm.rand"/>
    </field>
    </form>

    spring config

    <bean name="/check" class="com.yourcompany.struts.action.CheckAction"/>

    checkAction.java

    public class CheckAction extends Action {
    /*
    * Generated Methods
    */

    /**
    * Method execute
    * @param mapping
    * @param form
    * @param request
    * @param response
    * @return ActionForward
    */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    DynaValidatorForm checkForm = (DynaValidatorForm) form;// TODO Auto-generated method stub
    /*HttpSession session=request.getSession();
    String strrand = (String)session.getAttribute("rand");
    session.setAttribute("rand", strrand);*/
    return mapping.findForward("ok");
    }
    }

    check.jsp

    <%@ page language="java" pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>

    <html>
    <head>
    <title>JSP for DynaValidatorForm form</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="0">
    </head>
    <body>
    <html:form action="/check">
    <td><img border=0 src="check/image.jsp"></td>
    <html:text property="rand"/><html:errors property="rand"/><br/>
    <html:submit/><html:cancel/>
    </html:form>
    </body>
    </html>



    checkok.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    </head>
    <body>
    <%
    String rand = (String)session.getAttribute("rand");
    String input = request.getParameter("rand");
    if (rand.equals(input)) {
    %>
    <font color=green>OK</font>
    <%
    } else {
    %>
    <font color=red>FAIL</font>
    <%
    }
    %>
    </body>
    </html>

    image.jsp

    <%@ page language="java" import="java.util.*" %>
    <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,javax.imageio.*" %>
    <%@ page import="java.io.OutputStream" %>
    <%!
    Color getRandColor(int fc,int bc){
    Random random = new Random();
    if(fc>255) fc=255;
    if(bc>255) bc=255;
    int r=fc+random.nextInt(bc-fc);
    int g=fc+random.nextInt(bc-fc);
    int b=fc+random.nextInt(bc-fc);
    return new Color(r,g,b);
    }
    %>
    <%
    response.setHeader("Pragma","No-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setDateHeader("Expires", 0);

    int width=60, height=20;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    OutputStream os=response.getOutputStream();
    Graphics g = image.getGraphics();

    Random random = new Random();


    g.setColor(getRandColor(200,250));
    g.fillRect(0, 0, width, height);

    g.setFont(new Font("Times New Roman",Font.PLAIN,18));

    g.setColor(getRandColor(160,200));
    for (int i=0;i<155;i++)
    {
    int x = random.nextInt(width);
    int y = random.nextInt(height);
    int xl = random.nextInt(12);
    int yl = random.nextInt(12);
    g.drawLine(x,y,x+xl,y+yl);
    }

    String sRand="";
    for (int i=0;i<4;i++){
    String rand=String.valueOf(random.nextInt(10));
    sRand+=rand;

    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
    g.drawString(rand,13*i+6,16);
    }

    session.setAttribute("rand",sRand);

    g.dispose();

    ImageIO.write(image, "JPEG",os);
    os.flush();
    os.close();
    os=null;
    response.flushBuffer();
    out.clear();
    out = pageContext.pushBody();
    %>
  • 相关阅读:
    Apriori 算法-如何进行关联规则挖掘
    Nginx 常用命令
    Nginx Location匹配规则
    Nginx 负载均衡
    angular 路由传参的三种方式
    JAVA中final关键字的作用
    Python函数参数和注解是什么
    JMeter测试计划配置项解析
    JMeter元件作用域实践指南
    原来Python函数只是个对象
  • 原文地址:https://www.cnblogs.com/alamps/p/2570850.html
Copyright © 2020-2023  润新知