java kaptcha验证码,简单操作

mac2025-10-08  1

引入服务

<dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency>

controller

package com.skypegmwcn.zhxy.skypegmwcn.controller; import com.google.code.kaptcha.impl.DefaultKaptcha; import com.skypegmwcn.zhxy.skypegmwcn.entity.Login; import com.skypegmwcn.zhxy.skypegmwcn.service.LoginService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.servlet.server.Session; import org.springframework.web.bind.annotation.*; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; @RestController @AllArgsConstructor @RequestMapping("/login" ) @Api(value = "login", tags = "用户登录") public class LoginController { private LoginService loginService; @Autowired DefaultKaptcha defaultKaptcha; //获取验证码 @ApiOperation(value = "查询验证码", notes = "查询验证码") @GetMapping("/defaultKaptcha") public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception{ byte[] captchaChallengeAsJpeg = null; ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); try { //生产验证码字符串并保存到session中 String createText = defaultKaptcha.createText(); httpServletRequest.getSession().setAttribute("vrifyCode", createText); //使用生产的验证码字符串返回一个BufferedImage对象并转为byte写入到byte数组中 BufferedImage challenge = defaultKaptcha.createImage(createText); ImageIO.write(challenge, "jpg", jpegOutputStream); } catch (IllegalArgumentException e) { httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND); return; } //定义response输出类型为image/jpeg类型,使用response输出流输出图片的byte数组 captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); httpServletResponse.setHeader("Cache-Control", "no-store"); httpServletResponse.setHeader("Pragma", "no-cache"); httpServletResponse.setDateHeader("Expires", 0); httpServletResponse.setContentType("image/jpeg"); ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream(); responseOutputStream.write(captchaChallengeAsJpeg); responseOutputStream.flush(); responseOutputStream.close(); } /*** * 验证登录信息 * @param login * @param login * @return */ @ApiOperation(value = "登录验证", notes = "登录验证") @PutMapping("/imgvrifyControllerDefaultKaptcha") public boolean imgvrifyControllerDefaultKaptcha(HttpServletRequest httpServletRequest,Login login){ String captchaId = (String) httpServletRequest.getSession().getAttribute("vrifyCode"); String parameter = login.getCode(); if (!captchaId.equals(parameter)) { return false; } else { return loginService.login(login); } } }

service

package com.skypegmwcn.zhxy.skypegmwcn.service; import com.skypegmwcn.zhxy.skypegmwcn.entity.Admin; import com.skypegmwcn.zhxy.skypegmwcn.entity.Login; public interface LoginService { /*** * 验证登录信息 * @param login * @return */ Boolean login(Login login); }

实现service

package com.skypegmwcn.zhxy.skypegmwcn.service.impl; import com.skypegmwcn.zhxy.skypegmwcn.entity.Admin; import com.skypegmwcn.zhxy.skypegmwcn.entity.Login; import com.skypegmwcn.zhxy.skypegmwcn.mapper.AdminMapper; import com.skypegmwcn.zhxy.skypegmwcn.service.AdminService; import com.skypegmwcn.zhxy.skypegmwcn.service.LoginService; import lombok.AllArgsConstructor; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @Service @AllArgsConstructor public class LoginServicelmpl implements LoginService { private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder(); private AdminMapper adminMapper; /*** * 验证登录信息 * @param login * @return */ public Boolean login(Login login){ Admin admin = adminMapper.getAdmin(); if (!login.getPassWord().equals(ENCODER.encode(admin.getPassWord())) || !login.getUserName().equals(admin.getUserName())){ return false; } else { return true; } } }
最新回复(0)