千家信息网

Java如何实现滑动验证码

发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,小编给大家分享一下Java如何实现滑动验证码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!功能:java实现滑动验证码项目是采用springboot,maven开发工具:采用idea
千家信息网最后更新 2025年02月12日Java如何实现滑动验证码

小编给大家分享一下Java如何实现滑动验证码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

    功能:java实现滑动验证码

    项目是采用springboot,maven

    开发工具:采用idea

    1.效果演示

    2.后端代码

    控制层

    @Controllerpublic class SliderCodeController {     @Autowired    ResourceLoader resourceLoader;     @Autowired    private FileUtil fileUtil;     // 设置横轴位置缓存    public static Cache< String, Integer > cacheg = CacheBuilder.newBuilder().expireAfterWrite(60, TimeUnit.SECONDS)            .maximumSize(666666).build();     @GetMapping    @RequestMapping("index")    public String test(HttpServletRequest request, Model model) throws IOException {        return "index";    }      @GetMapping    @RequestMapping("getImg")    public @ResponseBody    Map< String, Object > getPic(HttpServletRequest request) throws IOException {        try {            File targetFile = fileUtil.getFile("target");            File tempImgFile = fileUtil.getFile("temp");            Map < String, Object > resultMap = VerifyImageUtil.pictureTemplatesCut(tempImgFile, targetFile);            // 生成流水号,这里就使用时间戳代替            String lno = Calendar.getInstance().getTimeInMillis() + "";            cacheg.put(lno, Integer.valueOf(resultMap.get("xWidth") + ""));            resultMap.put("capcode", lno);            // 移除横坐标送前端            resultMap.remove("xWidth");            return resultMap;        }        catch (Exception e) {            e.printStackTrace();            return null;        }     }      @GetMapping    @RequestMapping("checkImgCode")    public @ResponseBody Map < String, Object > checkcapcode(@RequestParam("xpos") int xpos,                                                             @RequestParam("capcode") String capcode, HttpServletRequest request) throws IOException {        Map < String, Object > result = new HashMap< String, Object >();        Integer x = cacheg.getIfPresent(capcode);        if (x == null) {            // 超时            result.put("code", 3);        }        else if (xpos - x > 5 || xpos - x < -5) {            // 验证失败            result.put("code", 2);        }        else {            // 验证成功            result.put("code", 1);        }        return result;    }}

    工具类

    @Componentpublic class FileUtil {     @Value("${file.path}")    private String filePath;     @Value("${file.target.path}")    private String targetFilePath;     @Value("${file.target.num}")    private Integer targetfileNum;     @Value("${file.temp.path}")    private String tempFilePath;     @Value("${file.temp.num}")    private Integer tempfileNum;     public File getFile(String type){        int num = 0;        String imgType = ".jpg";        String oldFilePath = "";        if(type.equals("target")){            num = new Random().nextInt(targetfileNum)  + 1;            oldFilePath = targetFilePath;        } else  if(type.equals("temp")){            num = new Random().nextInt(tempfileNum)  + 1;            imgType = "-w.png";            oldFilePath = tempFilePath;        }        String path = filePath;        String fileImg =   num + imgType;        String filePath = path + fileImg;        File pathFile = new File(path);        if(!pathFile.exists()){            pathFile.mkdirs();        }        File file = new File(filePath);        if(!file.exists()){            try {                file.createNewFile();                ClassPathResource classPathResource = new ClassPathResource(oldFilePath + fileImg);                InputStream inputStream = classPathResource.getInputStream();                if(inputStream.available() != 0){                    FileUtils.copyInputStreamToFile(inputStream, file);                }                inputStream.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return file;    } }

    3.前端页面

    滑动验证码        

    看完了这篇文章,相信你对"Java如何实现滑动验证码"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

    0