您的位置:首页 > Web前端 > JavaScript

JSF 登录界面 验证码

2011-11-26 17:34 211 查看

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="#" onclick="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中添加验证码也是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息