Java struts recaptcha v2无法正常运行

时间:2018-10-01 11:04:38

标签: java struts recaptcha

我已经实现了java struts应用程序以使用recaptcha v2。但我得到了例外:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

我已经尽力解决了这个问题,但没有得到任何解决方案。请帮我解决这个问题。

动作类方法:

public boolean HandleRecaptcha(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String gRecaptchaResponse = request.getParameter("g-recaptcha-response");
    System.out.println(gRecaptchaResponse);
    boolean verify = VerifyRecaptcha.verify(gRecaptchaResponse);

    if (verify) {
        return true;
    } else {
        PrintWriter out = response.getWriter();
        if (verify) {
            out.println("<font color=red>Either user name or password is wrong.</font>");
        } else {
            out.println("<font color=red>You missed the Captcha.</font>");
        }
        return false;
    }
}

VerifyRecaptcha.java

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.URL; 

import javax.json.Json; 
import javax.json.JsonObject;
import javax.json.JsonReader;
import javax.net.ssl.HttpsURLConnection;
import org.apache.log4j.Logger;

public class VerifyRecaptcha {
public static final String url = "https://www.google.com/recaptcha/api/siteverify";
public static final String secret = "secret key";
private final static String USER_AGENT = "Mozilla/5.0";

 static Logger logger = Logger.getLogger(VerifyRecaptcha.class);

public static boolean verify(String gRecaptchaResponse) throws IOException {
    if (gRecaptchaResponse == null || "".equals(gRecaptchaResponse)) {
        return false;
    }
    try{
    URL obj = new URL(url);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
    // add reuqest header
    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", USER_AGENT);
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
    String postParams = "secret=" + secret + "&response="+ gRecaptchaResponse;
    // Send post request
    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(postParams);
    wr.flush();
    wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + postParams);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();
    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();
    // print result
    System.out.println(response.toString());
    //parse JSON response and return 'success' value
    JsonReader jsonReader = Json.createReader(new StringReader(response.toString()));
    JsonObject jsonObject = jsonReader.readObject();
    jsonReader.close();
    return jsonObject.getBoolean("success");
    }catch(Exception e){
        logger.fatal("Error :>",e);
        return false;
    }
}

}

我已经尝试了几种方法,但是在所有情况下都失败了。我在这里没有提到jsp页面代码。

1 个答案:

答案 0 :(得分:0)

该异常表示缺少证书。

尝试使用https://www.google.com实用程序将keytool的证书添加到cacerts或密钥库文件中。 cacerts文件通常位于%JAVA_HOME%/lib/security中。