判断web访问是内网或是外网

最近在项目中添加一个支持外网下载的功能。因为内外网不同的下载URL,所以需要判断当前网络是否为外网。

首先方案是在java代码中判断

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

String urlProtocol = request.getScheme();

if (urlProtocol.equals("http")) {
	//
} else {
    //  
}

理论上看这个问题,解决的比较完美,但是实际操作下来,还是有些问题,一直是http,从来没有出现过https,应该是应用经过nginx转发,一直都是http,如果想在java中进行判断,需要再nginx中进行配置,这种还是比较麻烦的。

然后我又转换思路,在js中进行判断,然后将判断结果反馈到后端。

var isHttps = 'https:' == document.location.protocol ? 1 : 0;

在js中很容易就实现判断内外网访问。