添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
接下来上代码,我这里用的是springboot自带的RestTemplate,各位如果没用到可以用HttpURLConnection。案例是在拦截器里获取ip,并查询地址。如果内网测试的话,获取到的是内网ip,通过内网穿透出去访问,可以获取你的公网出口ip,或者吧ip直接写死。

@SpringBootApplication
public class LgmallRestApplication {
    @Autowired
    private RestTemplateBuilder builder;
    @Bean
    public RestTemplate restTemplate() {
        return builder.build();
    public static void main(String[] args) {
        SpringApplication.run(LgmallRestApplication.class, args);
 * @Author: nelson
 * @Description: 商品浏览记录
 * @Date: created in 2018/03/31/16:49
public class BrowseItemInterceptor implements HandlerInterceptor {
    @Autowired
    private RestTemplate restTemplate;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String ip = request.getHeader("x-forwarded-for");
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
            // 多次反向代理后会有多个ip值,第一个ip才是真实ip
            if( ip.indexOf(",")!=-1 ){
                ip = ip.split(",")[0];
        //新浪查询失败查询阿里
        String sina = restTemplate.getForObject("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip={ip}", String.class,ip);
        SinaIpVo sinaIpVo = new Gson().fromJson(sina, SinaIpVo.class);
        if(sinaIpVo.getRet()!=-1){
            System.out.println(sinaIpVo.getProvince());
            System.out.println(sinaIpVo.getCity());
        }else{
            String object = restTemplate.getForObject("http://ip.taobao.com/service/getIpInfo.php?ip={ip}", String.class,ip);
            IpVo ipVo = new Gson().fromJson(object, IpVo.class);
            // XX表示内网 
            if(ipVo.getCode()==0 && !ipVo.getAddress().getRegion().equals("XX")){
                System.out.println(ipVo.getAddress().getRegion());
                System.out.println(ipVo.getAddress().getCity());
        return true;
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

阿里返回结果封装的vo,省去get、set方法,需要其他的属性根据返回json自己扩展。

* @Author: nelson * @Description: get city by ip * @Date: created in 2018/03/31/17:40 public class IpVo implements Serializable{ private Integer code; private Address address; public class Address implements Serializable{ private String ip; private String region; private String city;

新浪返回结果封装的vo,省去get、set方法,需要其他的属性根据返回json自己扩展。

* @Author: nelson * @Description: get city by ip * @Date: created in 2018/03/31/17:40 public class SinaIpVo implements Serializable{ private Integer ret; private String province; private String city;

如果有问题,请在下方评论,或者加群讨论 200909980

关注下方微信公众号,可以及时获取到各种技术的干货哦,如果你有想推荐的帖子,也可以联系我们的。

《Java开发者面试百宝书》电子版地址下载
敲黑板!Java求职者看过来!保姆级面试干货你要不要!《Java开发者面试百宝书》集结阿里Java大神一手面试经验诚意出品,精选了阿里官方出品的面试干货和面试建议,包括Java面试常见问题标准答案以及阿里技术大神为你总结的面试要点。
《Java开发手册(嵩山版)灵魂15问》电子版地址下载
《〈Java开发手册(嵩山版)〉灵魂15问》重磅来袭!“一线大厂如何用Java” 解读再升级,千万阅读量博主深究Java规约背后的原理。
《Java开发手册(泰山版)灵魂13问》电子版地址下载
一线大厂怎么用Java?看千万阅读量技术博主给你分析!相信大家都读过《Java开发手册》泰山版,泰山版新增5条日期时间规约;新增2条表别名sql规约;新增统一错误码规约。 而《〈Java开发手册(泰山版)〉灵魂13问》则是为了帮助大家更好的理解这些规约背后的原理,从问题重现到原理分析再到解决问题,全网千万阅读量技术博主Hollis带你剖析阿里巴巴开发细节。
《Java开发手册(嵩山版)》电子版地址下载
《Java开发手册(嵩山版)》经过不断地精进与苦练终于出山啦,它的内功提升之处在于依据约束力强弱及故障敏感性,规约依次分为【强制】、【推荐】、【参考】三大类。祝各位码林高手能够码出高效,码出质量!
《Java Spring Boot开发实战系列课程【第7讲】:Spring Boot 2.0安全机制与MVC身份验证实战(Java面试题)》电子版地址
Java Spring Boot开发实战系列课程【第7讲】:Spring Boot 2.0安全机制与MVC身份验证实战(Java面试题)
《阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库》电子版地址
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库
《云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧》电子版地址
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧