在专用网络中无法访问GitHub.com等网站的解决方法(仅适用于浏览器)

当设备处于某专用网络(如办公网络中)无法访问github.com等外部网站时, 有可能是该办公网络将这些网站的DNS转向了其他无法访问的位置(如localhost、127.0.0.1), 您又没有办法更改当前DNS, 因为有可能您办公网络的部分内部网站基于该专用网络自动设置的DNS, 这时, 您可以设置浏览器内的安全DNS.

如果您的浏览器是Chrome, 您可以打开 [设置], 找到 [隐私设置和安全性] 下的 [安全] , 打开后您会看到在 [高级] 设置块中有 [使用安全 DNS] 的设置, 选择使用自定义后在下方输入框中填写 https://dns.alidns.com/dns-query (这个是阿里的).

如果您的浏览器是FireFox, 您可以打开 [设置] , 在右上角搜索 [网络设置] 您会看到一个 [设置] 按钮, 点击进入连接设置, 找到最下面的 [启用基于 HTTPS 的 DNS] 选中, 将 [选用提供商] 下拉框调整至自定义, 并在下方自定义输入框中输入 https://dns.alidns.com/dns-query 即可.

如果您的浏览器是Microsoft Edge, 您可以打开 [设置], 在左上角搜索 [使用安全的 DNS 指定如何查找网站的网络地址] , 然后选中 [请选择服务提供商] 并在下方输入框中输入 https://dns.alidns.com/dns-query 即可.(有可能设置无效)

如果您的浏览器是Internet Explorer ……………….. 自求多福

谷歌验证码 ReCAPTCHA HTML前端配置

在前端HTML中导入ReCAPTCHA的api

<script src="https://recaptcha.net/recaptcha/api.js?onload=reCaptchaOnLoadCallback" async defer></script>

然后在需要验证码的位置添加验证码框 (把{SITE_KEY}替换成你自己的KEY)

<div id="g-recaptcha-box" style="margin: auto" class="g-recaptcha" data-callback="" data-sitekey="{SITE_KEY}"></div>

在JavaScript获取验证后的响应信息

//获取recaptcha的response
let response = grecaptcha.getResponse()
if (response === "") {
    //如果response为空,则抖动人机验证框进行提示
    //TODO 抖动效果
}

将response随表单提交到后端进行校验

谷歌验证码 ReCAPTCHA JAVA

package cn.nzdev.web.user_center.utils;

import com.google.gson.Gson;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Map;

/**
 * @author 玖洲丿林
 * @version 1.0
 * @implNote TODO
 * @implSpec TODO
 * @ClassName ReCaptchaUtil
 * @CreateDate 2021/2/25 20:51
 */
public class ReCaptchaUtil {

    private static final String CAPTCHA_KEY = "g-recaptcha-response";

    public static boolean validation(HttpServletRequest request) {
        String response = getGreCaptchaResponse(request);
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost("https://recaptcha.net/recaptcha/api/siteverify");
        ArrayList<NameValuePair> param = new ArrayList<>();
        param.add(new BasicNameValuePair("secret", "TEST"));
        param.add(new BasicNameValuePair("response", response));
        httpPost.setEntity(new UrlEncodedFormEntity(param, StandardCharsets.UTF_8));
        CloseableHttpResponse execute;
        try {
            execute = httpClient.execute(httpPost);
        } catch (IOException e) {
            return false;
        }
        if (execute.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
            return false;
        }
        String responseEntity;
        try {
            responseEntity = EntityUtils.toString(execute.getEntity(), StandardCharsets.UTF_8);
        } catch (IOException e) {
            return false;
        }
        System.out.println(responseEntity);
        Gson gson = new Gson();
        Map<?,?> map = gson.fromJson(responseEntity, Map.class);
        Object success = map.get("success");
        try {
            return Boolean.parseBoolean(success.toString());
        } catch (Exception e) {
            return false;
        }
    }

    private static String getGreCaptchaResponse(HttpServletRequest request) {
        return request.getParameter(CAPTCHA_KEY);
    }
}