引入jsp方式
先创建一个jsp文件,下面这段jsp,其实就是在jsp上写java代码来画一个验证码图片,然后把生成的验证码存入session当中,然后在后台就可以通过session来获取到验证码进行验证
前台:validatecode.jsp,这是一个单独的jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ 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 = 80;
int height = 32;
//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); //把生成的验证码存入session当中
g.setColor(new Color(0, 100, 0));
g.setFont(new Font("Candara", Font.BOLD, 24));
g.drawString(capstr, 8, 24);
g.dispose();
response.setContentType("image/jpeg");
out.clear();
out = pageContext.pushBody();
OutputStream strm = response.getOutputStream();
ImageIO.write(image, "jpeg", strm);
strm.close();
%>
登录页面示例:
在登陆页面的jsp内加入:
<img style="height: 100%;width: 100%" id="loginform:vCode"
src="${pageContext.request.contextPath }/jsps/validatecode.jsp"
onclick="javascript:document.getElementById('loginform:vCode').src='${pageContext.request.contextPath }
/jsps/validatecode.jsp?'+Math.random();" />
我的登录页面验证码区域 jsp如下:
就是把上面的代码放到这里就可以。
后台controller:
@RequestMapping("/login")
@ResponseBody
public ResultUtil login(String userName, String password, HttpSession session,String Codes_text){
ManagerUser user = loginService.getManagerUser(userName,password);
if(session.getAttribute("user")!=null){
return ResultUtil.isError();
}
Object key = session.getAttribute("key");
if(user==null){
return ResultUtil.isError("用户名或密码不正确!");
}else{
if(key.equals(Codes_text)){
session.setAttribute("user",user);
return ResultUtil.isOk();
}else {
return ResultUtil.isError("验证码错误!");
}
}
}
我这里返回的是自己封装的一个 ResultUtil 工具类,如果也想用这个工具类的话,代码如下:
package utils;
public class ResultUtil {
private String code;
private String message;
private boolean success;
private Object data;
public ResultUtil(String code, String message, boolean success, Object data) {
super();
this.code = code;
this.message = message;
this.success = success;
this.data = data;
}
public static ResultUtil isOk() {
return new ResultUtil("200","成功",true,null);
}
public static ResultUtil isOk(Object obj) {
return new ResultUtil("200","成功",true,obj);
}
public static ResultUtil isError(){
return new ResultUtil("400","失败",false,null);
}
public static ResultUtil isError(Object obj){
return new ResultUtil("400","失败",false,obj);
}
public ResultUtil() {
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
就酱紫,你就可以获取验证码啦!