package project.web.api; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import kernel.exception.BusinessException; import kernel.util.StringUtils; import kernel.web.BaseAction; import kernel.web.ResultObject; import project.syspara.SysparaService; import project.user.captcha.GeetestService; /** * Geetest滑动图片验证 * * 在LoginController.java中放开下面这行,登录管理后台登录界面即可以测试 * // geetest测试 * modelAndView.setViewName("geetest"); */ @RestController @CrossOrigin public class GeetestController extends BaseAction { private Logger logger=LoggerFactory.getLogger(GeetestController.class); @Autowired private GeetestService geetestService; @Autowired private SysparaService sysparaService; private final String action = "/api/geetest!"; /** * 获取 challenge和captcha_id */ @RequestMapping(action + "getChallengeAndCaptchaid.action") public Object getChallengeAndCaptchaid(HttpServletRequest request) { ResultObject resultObject = new ResultObject(); try { // 自定义参数,可选择添加 HashMap param = new HashMap(); // 网站用户id param.put("user_id", "test"); String geetest_id = this.sysparaService.find("geetest_id").getValue(); String geetest_key = this.sysparaService.find("geetest_key").getValue(); String new_failback = this.sysparaService.find("geetest_new_failback").getValue(); if(StringUtils.isEmptyString(geetest_id) || StringUtils.isEmptyString(geetest_key) || StringUtils.isEmptyString(new_failback)) { throw new BusinessException("系统参数错误"); } param.put("geetest_id", geetest_id); param.put("geetest_key", geetest_key); param.put("new_failback", new_failback); HashMap retMap = this.geetestService.preProcess(param); retMap.put("user_id", param.get("user_id")); retMap.put("gt_server_status", retMap.get("success")); resultObject.setData(retMap); } catch (BusinessException e) { resultObject.setCode("1"); resultObject.setMsg(e.getMessage()); } catch (Throwable t) { resultObject.setCode("1"); resultObject.setMsg("程序错误"); logger.error("error:", t); } return resultObject; } /** * 返回验证结果, request表单中必须包含challenge, validate, seccode */ @RequestMapping(action + "verify.action") public Object verify(HttpServletRequest request) { String challenge = request.getParameter("geetest_challenge"); String validate = request.getParameter("geetest_validate"); String seccode = request.getParameter("geetest_seccode"); String gt_server_status = request.getParameter("gt_server_status"); // String user_id = request.getParameter("user_id"); ResultObject resultObject = new ResultObject(); try { // 自定义参数,可选择添加 HashMap param = new HashMap(); // 网站用户id param.put("user_id", "test"); param.put("challenge", challenge); param.put("validate", validate); param.put("seccode", seccode); String geetest_id = this.sysparaService.find("geetest_id").getValue(); String geetest_key = this.sysparaService.find("geetest_key").getValue(); String new_failback = this.sysparaService.find("geetest_new_failback").getValue(); if(StringUtils.isEmptyString(geetest_id) || StringUtils.isEmptyString(geetest_key) || StringUtils.isEmptyString(new_failback)) { throw new BusinessException("系统参数错误"); } param.put("geetest_id", geetest_id); param.put("geetest_key", geetest_key); param.put("new_failback", new_failback); int gtResult = 0; if ("1".equals(gt_server_status)) { // gt-server正常,向gt-server进行二次验证 gtResult = this.geetestService.enhencedValidateRequest(param); System.out.println(gtResult); } else { // gt-server非正常情况下,进行failback模式验证 System.out.println("failback:use your own server captcha validate"); gtResult = this.geetestService.failbackValidateRequest(param); System.out.println(gtResult); } HashMap retMap = this.geetestService.preProcess(param); if (1 == gtResult) { // 验证成功 retMap.put("status", "success"); retMap.put("version", this.geetestService.getVersionInfo()); } else { // 验证失败 retMap.put("status", "fail"); retMap.put("version", this.geetestService.getVersionInfo()); } resultObject.setData(retMap); } catch (BusinessException e) { resultObject.setCode("1"); resultObject.setMsg(e.getMessage()); } catch (Throwable t) { resultObject.setCode("1"); resultObject.setMsg("程序错误"); logger.error("error:", t); } return resultObject; } }