前台动态获取验证码

引入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;
	}
}

就酱紫,你就可以获取验证码啦!

猜你喜欢

转载自blog.csdn.net/qq_43154385/article/details/85000411