知识改变命运! java实现判断是手机端还是pc端访问, nginx实现判断是手机端还是pc端访问_猿份哥-lskyf博客社区

java实现判断是手机端还是pc端访问, nginx实现判断是手机端还是pc端访问

猿份哥 1年前 ⋅ 1748 阅读 ⋅ 0 个赞

1.编写工具类

/**
 * @author 缘分哥
 * @description 判断是否移动端工具
 */
public class ClientUtils {
    public static String[] mobileAgents = { "iphone", "android","ipad", "phone", "mobile", "wap", "netfront", "java", "opera mobi",
        "opera mini", "ucweb", "windows ce", "symbian", "series", "webos", "sony", "blackberry", "dopod",
        "nokia", "samsung", "palmsource", "xda", "pieplus", "meizu", "midp", "cldc", "motorola", "foma",
        "docomo", "up.browser", "up.link", "blazer", "helio", "hosin", "huawei", "novarra", "coolpad", "webos",
        "techfaith", "palmsource", "alcatel", "amoi", "ktouch", "nexian", "ericsson", "philips", "sagem",
        "wellcom", "bunjalloo", "maui", "smartphone", "iemobile", "spice", "bird", "zte-", "longcos",
        "pantech", "gionee", "portalmmm", "jig browser", "hiptop", "benq", "haier", "^lct", "320x320",
        "240x320", "176x220", "w3c ", "acs-", "alav", "alca", "amoi", "audi", "avan", "benq", "bird", "blac",
        "blaz", "brew", "cell", "cldc", "cmd-", "dang", "doco", "eric", "hipt", "inno", "ipaq", "java", "jigs",
        "kddi", "keji", "leno", "lg-c", "lg-d", "lg-g", "lge-", "maui", "maxo", "midp", "mits", "mmef", "mobi",
        "mot-", "moto", "mwbp", "nec-", "newt", "noki", "oper", "palm", "pana", "pant", "phil", "play", "port",
        "prox", "qwap", "sage", "sams", "sany", "sch-", "sec-", "send", "seri", "sgh-", "shar", "sie-", "siem",
        "smal", "smar", "sony", "sph-", "symb", "t-mo", "teli", "tim-", "tosh", "tsm-", "upg1", "upsi", "vk-v",
        "voda", "wap-", "wapa", "wapi", "wapp", "wapr", "webc", "winw", "winw", "xda", "xda-",
        "Googlebot-Mobile" };
    /**
     * 判断是否为手机客户端
     */
    public static boolean isMoblie(HttpServletRequest request) {
        boolean isMoblie = false;

        if (request.getHeader("User-Agent") != null) {
            String agent=request.getHeader("User-Agent");
            for (String mobileAgent : mobileAgents) {
                if (agent.toLowerCase().indexOf(mobileAgent) >= 0&&agent.toLowerCase().indexOf("windows nt")<=0 &&agent.toLowerCase().indexOf("macintosh")<=0) {
                    isMoblie = true;
                    break;
                }
            }
        }
        return isMoblie;
    }
}

2.编写处理器

/**
 * @author 缘分哥
 * @description 客户端区分处理
 */
public class ClientHandler extends HandlerInterceptorAdapter {

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

        super.afterCompletion(request, response, handler, ex);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

        boolean isMoblie = ClientUtils.isMoblie(request);
        if (isMoblie == true) {
            System.out.println("===============手机端========================");
            //编写自己的业务逻辑....
        }

        super.postHandle(request, response, handler, modelAndView);


    }

}

3.注册处理器

/**
 * @author 缘分哥
 * @description 注册处理器
 */
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Bean
    public ClientHandler cilentHandler(){
        return new ClientHandler();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(cilentHandler()).addPathPatterns("/**");
    }
}

参照:https://blog.csdn.net/qq_32657581/article/details/71405838

##======================分割线====================

nginx判断是pc还是移动访问

nginx.conf加入

......
http{
 include /etc/nginx/conf.d/*.conf;
}

在/etc/nginx/conf.d/目录下创建client.conf


   server {
        listen 9080 default_server;
		server_name pc.test.cn;
		
		#是手机访问就301重定向到m.test.cn:8080
		if ($http_user_agent ~* "(mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)") {
           rewrite  ^/(.*)$  http://m.test.cn:8080$uri permanent;
        }


        location / {

			proxy_pass http://localhost:8082/;
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Forwarded-Proto $scheme;
			proxy_redirect off;
			add_header Cache-Control no-cache;
			add_header Pragma no-cache;
			add_header Expires 0;

        }
    }

       server {
        listen 9080;
	    server_name mobile.test.cn;
		#不是手机访问就301重定向到pc.test.cn:8080
		if ($http_user_agent !~* "(mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)") {
           rewrite  ^/(.*)$  http://pc.test.cn:8082$uri permanent;
        }

        location / {

			proxy_pass http://localhost:8082/;
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
    		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    		proxy_set_header X-Forwarded-Proto $scheme;
			proxy_redirect off;
			add_header Cache-Control no-cache;
			add_header Pragma no-cache;
			add_header Expires 0;

        }
    }


全部评论: 0

    我有话说:

    zuk手机每打开一个应用就先来一波广告,我怎么解决的

    最近发现我的zuk手机,打开一个应用后就先弹出一个启动广告,还有跳过的按钮。原先以为应用本身的启动广告。后来发现以前没有启动广告的应用也有这种广告,而其点击后下载广告应用。每个应用弹一次,想想

    chrome浏览器如何设置默认搜索引擎:谷歌、百度、Bing?

    欢迎来到 lskyf.com!本文将详细介绍如何在手机Chrome浏览器和Windows 10 PC(使用Chrome浏览器)设置默认搜索引擎为谷歌、百度或Bing。通过这些个性化配置,您可以更

    xshell可以实现本地编辑服务器运行的效果吗?这样就不必每次都手动修改上传了

    需求背景: xshell可以实现本地编辑服务器运行的效果吗?这样就不必每次都手动修改上传了 Xshell操作说明: Xshell可以实现本地编辑服务器运行的效果。Xshell一款功能强大的SSH

    电脑手机千牛卖家可以登录多个账号吗?

    有的卖家可能需要开不同的淘宝店铺,但是可以登录不同账号管理店铺吗? 答案:当然可以 千牛电脑如何登录多个账号? 切换到电脑桌面双击千牛登录账号A后 返回桌面双击千牛,弹出登录界面输入账号B信息后

    电池寿命优化指南:实用步骤助你释放手机电池的超能力

    引言: 曾经有一群拥有非凡能力的手机电池,它们可以让你的手机连续工作数天。但是,在现实世界中,我们需要更实用的方法来延长电池寿命。本指南将为你提供详细步骤,帮助你释放手机电池的超能力。 步骤 1

    java高频面试题-Spring Boot的自动配置如何工作的,以及它的优点什么?

    Spring Boot的自动配置其设计理念的核心之一,它通过约定大于配置的思想,为开发者提供了一种零配置的开发体验。以下对这个问题的详细解答: 自动配置原理: Spring Boot通过

    没有安全感因为自己不够强大

    人只有自己足够强大了,才会有安全感。自己强,比什么都强,你要知道,寻找一棵大树好乘凉,不如自栽自养。 没有安全感因为自己不够强大 最近发生了很多事情,让我一度很没有安全感,其中就,前几天发生的

    Spring Boot应用或SpringCloud程序设置口号的几种方式

    前言:springboot项目的每个应用都需要设置口号,如何设置口号呢?主要有以下这几种方式 1.通过配置文件设置: (1)在/src/main/resources/路径下的

    手机如何省电-让手机发挥它关键的作用

    有时候总感觉手机的电不够用;明明没用几分钟,电量却哗哗的流掉了。特别出门在外,遇到什么情况,手机不能用,简直没有安全感,为了让手机发挥它关键的作用这些试试这些方法来省省电! 1.使用飞行模式

    idea官网无法访问怎么办?

    当我想下载最新的IDEA工具或者去IDEA JetBrains官网去离线下载IDEA 插件的时候总遇到https://www.jetbrains.com/不能访问。 我通过网上的资料说需要排查

    最新OPPO手机如何键截屏开启双击亮屏功能?

    前言 经常使用oppo手机要是知道这样可以双击亮屏,有多方便谁用谁知道。如何设置呢?下面步骤 1.在手机桌面找到设置 2.便捷辅助 3.黑屏手势 4.打开黑屏手势开关显示出下面的双击亮屏然后

    分享5款手机截屏方法

    分享5款手机截屏方法 看剧的时分,碰到精彩的部分就想把它截屏保存。哪里看到想买的衣服或许其他东西,也少不了截图到淘宝搜一搜。刷微博看朋友圈,看到有意思的话仍要截图同享给亲人朋友。 手机的运用过中现

    手机黑屏开不了机?

             正玩这手机但是手机突然黑屏开不了机了,开机键无论怎么按完全不起作用。焦急的心理欲哭无泪啊!下面给大家讲述一个强制开机的方法(我的

    电脑WPS广告360广告老弹出怎么办?终极治愈招数有哪些?

    1.痛点 每次打开电脑最烦的就是一眼就看到WPS广告或者360广告,咨询等等的广告呈现在你面前,影响了你一天的好心情!怎么办有什么好治愈心情的方法吗?我不要看广告。 2.终极治愈方案 将WPS广告或360卸掉,这个方法确实不错!但是呢有时候还是不...

    我们的婚姻爱情的城堡

    总说婚姻爱情的坟墓,半路可能会出来一个盗墓的。婚姻一座围城,城外的人想进去,城里的人想出来。可我觉得我们的婚姻爱情的城堡,我们的爱情在婚姻中得到升华。 自卑的我遇见了他 我和我先生(卢先生

    加入公众号
    加入公众号