VerifyCodeController.java 2.01 KB
package com.jflyfox.api.controller;

import com.jfinal.kit.PathKit;
import com.jflyfox.api.form.ApiResp;
import com.jflyfox.api.service.ApiCache;
import com.jflyfox.api.util.VerifyImageUtil;
import com.jflyfox.component.base.BaseProjectController;
import com.jflyfox.jfinal.component.annotation.ControllerBind;

import java.io.File;
import java.util.*;

/**
 * 滑动验证码控制器
 *
 * @author likai
 * @date Created in 2020/6/12 9:54
 */
@ControllerBind(controllerKey = "/api/verify_code")
public class VerifyCodeController extends BaseProjectController {


    private static final Long IMG_CACHE_EX_TIME = 120L;
    private static final String TEMP_IMG_PATH = "/image/verify_code";

    public void get() {
        // new ApiResp().setData()
        renderJson();
    }

    /**
     * 获取文件路径
     *
     * @param path 文件地址
     * @return
     */
    public List<File> queryFileList(String path) {
        File file = new File(PathKit.getWebRootPath() + TEMP_IMG_PATH);
        File[] files = file.listFiles();
        return Arrays.asList(files);
    }


    /**
     * 获取滑动图片
     */
    public void getImageVerifyCode() {
        // 读取图库目录
        List<File> tempimgList = queryFileList(TEMP_IMG_PATH);
        File tempImgFile = tempimgList.get(new Random().nextInt(tempimgList.size()));
        // 根据模板裁剪图片
        Map<String, Object> resultMap = new HashMap<>();
        try {
            VerifyImageUtil.createImage(tempImgFile, resultMap);
        } catch (Exception e) {
            e.printStackTrace();
        }
        int xWidth = (int) resultMap.get("xWidth");
        // sessionId 为key,value滑动距离X轴,缓存120秒
        String checkMoveId = UUID.randomUUID().toString().replaceAll("-", "");
        ApiCache.addCache(checkMoveId, xWidth, IMG_CACHE_EX_TIME);
        // 移除map的滑动距离,不返回给前端
        resultMap.remove("xWidth");
        resultMap.put("checkMoveId", checkMoveId);
        renderJson(new ApiResp().setData(resultMap));
    }
}