JSF 登录界面 验证码

JSF 登录界面添加验证码

1.validateCode.jsp(生成验证码图):

<%@ page import="java.util.Random"%>
<%@ page import="java.io.OutputStream"%>
<%@ page import="java.awt.Color"%>
<%@ page import="java.awt.Font"%>
<%@ page import="java.awt.Graphics"%>
<%@ page import="java.awt.image.BufferedImage"%>
<%@ page import="javax.imageio.ImageIO"%>
<%
	int width = 60;
	int height = 22;
	//create the image
	BufferedImage image = new BufferedImage(width, height,
			BufferedImage.TYPE_INT_RGB);
	Graphics g = image.getGraphics();
	// set the background color
	g.setColor(new Color(0xDCDCDC));
	g.fillRect(0, 0, width, height);
	// draw the border
	g.setColor(Color.black);
	g.drawRect(0, 0, width - 1, height - 1);
	// create a random instance to generate the codes
	Random rdm = new Random();
	String hash1 = Integer.toHexString(rdm.nextInt());
	// make some confusion
	for (int i = 0; i < 50; i++) {
		int x = rdm.nextInt(width);
		int y = rdm.nextInt(height);
		g.drawOval(x, y, 0, 0);
	}
	// generate a random code
	String capstr = hash1.substring(0, 4);
	session.setAttribute("key", capstr);
	g.setColor(new Color(0, 100, 0));
	g.setFont(new Font("Times New Roman", Font.PLAIN, 20));
	g.drawString(capstr, 11, 17);
	g.dispose();
	response.setContentType("image/jpeg");
	out.clear();
	out = pageContext.pushBody();
	OutputStream strm = response.getOutputStream();
	ImageIO.write(image, "jpeg", strm);
	strm.close();
%>

2.在登录界面的适当位置加入验证码:

                    <dl>
                        <dt>
                            <h:outputText value="验证码" />
                            :
                        </dt>
                        <dd>
                            <h:inputText id="validateCode" value="#{User.prop['validateCode']}"
                                style="width:30px;" />
                                  <div style="position:absolute;left:630px;top:204px;">
                                    <img src="validateCode.jsp" id="getCode"/>
                                    <a href="#" οnclick="javasrcipt:validateCode()">重新获取验证码</a>
                                </div>
                        </dd>
                    </dl>

3.validateCode 方法(实现验证码局部刷新):

<script language="javascript" type="text/javascript">
    function   validateCode() {  
       document.getElementById('getCode').src="validateCode.jsp?"+Math.ceil(Math.random()*1000);  
     }   
</script>

4.User类中的Login()方法:

public void login() {
		try {
			...获取用户名、密码等
			String validateCode = prop.get("validateCode");			
			String key = (String)( ((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true)).getAttribute("key"));		
			if ("".equals(validateCode)) {
				String msg = "请输入验证码!";
				getMySession().setMsg(msg, Integer.valueOf(2));
				return;
			}
			
			if (validateCode.equals(key)) {
				...登录处理
			} else {
				String msg = "验证码错误!!!";
				getMySession().setMsg(msg, Integer.valueOf(2));
				return;
			}
				
		} catch (Exception ex) {
			String msg = getLang().getProp().get(getMySession().getL()).get("faield");
			getMySession().setMsg(msg, Integer.valueOf(2));
			ex.printStackTrace();
		}
	}

只要掌握原理,在JSP中添加验证码也是一样的。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值