中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何實現滑動驗證碼

發布時間:2022-03-01 09:09:14 來源:億速云 閱讀:584 作者:小新 欄目:開發技術

小編給大家分享一下Java如何實現滑動驗證碼,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

    功能:java實現滑動驗證碼

    項目是采用springboot,maven

    開發工具:采用idea

    1.效果演示

    Java如何實現滑動驗證碼

    Java如何實現滑動驗證碼

    Java如何實現滑動驗證碼

    2.后端代碼

    控制層

    @Controller
    public 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;
        }
    }

    工具類

    @Component
    public 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.前端頁面

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta charset="UTF-8">
    <title>滑動驗證碼</title>
    <link rel="stylesheet" href="/css/slide.css" rel="external nofollow" >
    <script src="/js/jquery-1.11.1.min.js"></script>
    <script src="/js/jquery.lgyslide.js"></script>
    </head>
    <body>
    	<div id="imgscode"></div>
    	<script>
    		$(function() {
    			setTimeout(function() {
    				createcode();
    			}, 1000)
    		}());
    		//顯示驗證碼
    		function createcode() {
    			$
    					.ajax({
    						type : 'POST',
    						url : '/getImg',
    						dataType : 'json',
    						success : function(data) {
    							if (data != null) {
    								$("#imgscode")
    										.imgcode(
    												{
    													frontimg : 'data:image/png;base64,'
    															+ data.slidingImage,
    													backimg : 'data:image/png;base64,'
    															+ data.backImage,
    													yHeight : data.yHeight,
    													refreshcallback : function() {
    														//刷新驗證碼
    														createcode();
    													},
    													callback : function(msg) {
    														console.log(msg);
    														var $this = this;
    														$
    																.ajax({
    																	type : 'POST',
    																	url : '/checkImgCode',
    																	data : {
    																		xpos : msg.xpos,
    																		capcode : data.capcode
    																	},
    																	dataType : 'json',
    																	success : function(
    																			data) {
    																		console
    																				.log(data)
    																		if (data.code == 1) {
    																			$this
    																					.getsuccess();
    																		} else {
    																			if (data.code == 4) {
    																				createcode();
    																			} else if (data.code == 3) {
    																				$this
    																						.getfail("驗證碼過期,請刷新");
    																			} else {
    																				$this
    																						.getfail("驗證不通過");
    																			}
    																		}
     
    																	}
    																})
    													}
    												});
    							}
    						}
    					})
    		}
    	</script>
    </body>
    </html>

    看完了這篇文章,相信你對“Java如何實現滑動驗證碼”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    新蔡县| 自治县| 巴林右旗| 宜宾市| 延安市| 永州市| 腾冲县| 东兴市| 广昌县| 郁南县| 洪洞县| 美姑县| 天长市| 获嘉县| 昌宁县| 堆龙德庆县| 开平市| 彝良县| 博乐市| 镇坪县| 牟定县| 辰溪县| 龙口市| 临清市| 额尔古纳市| 华容县| 桂林市| 星子县| 宁晋县| 门头沟区| 阿克苏市| 清涧县| 丽水市| 都匀市| 塔河县| 剑河县| 靖宇县| 来宾市| 棋牌| 吉木乃县| 樟树市|