peternameyakj
2024-07-30 f23b33bbb9eaff76cac5b69e3b793fc7910fb0fa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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<String, String> param = new HashMap<String, String>();            
            // 网站用户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<String, String> 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<String, String> param = new HashMap<String, String>();
            
            // 网站用户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<String, String> 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;
    }
 
}