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

猿份哥 1年前 ⋅ 789 阅读 ⋅ 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手机,打开一个应用后就先弹出一个启动广告,还有跳过的按钮。原先以为应用本身的启动广告。后来发现以前没有启动广告的应用也有这种广告,而其点击后下载广告应用。每个应用弹一次,想想

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

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

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

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

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

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

    idea官网无法访问怎么办?

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

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

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

    分享5款手机截屏方法

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

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

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

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

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

    转 docker安装redis并允许外网访问

    docker安装redis并允许外网访问 拉取redis镜像 docker pull redis:3.2 本地新建redis配置文件 redis.conf ,写入以下内容 #允许外网访问 bind

    手机黑屏开不了机?

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

    我们的婚姻爱情的城堡

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

    好的爱情就彼此成就

    好的爱情会让你变优秀,会让彼此成为更好的自己。我们在一起7年了,不痒。今天一大早,我没有睡醒,我先生就在耳朵旁边说:我爱你亲爱的。 我们相恋了 7年前的今天,我和你相识相恋,身边的朋友介绍的

    父母孩子最好的老师无疑了

    对于孩子来说,最好的教育不打骂,而是以身作责,言传身教。我们应该做孩子的榜样,当他小的时候我们就当好父母,让他们形成良好的习惯。 记得2017年最火的央视节目里《中国诗词大会》的冠军武亦姝吗

    你瘦不下来因为对自己不够狠

    其实不瘦不下来,对自己不够狠,怕累怕饿怕苦,可你就不怕胖。 当我因为自己用半年的时间从136斤瘦到116斤而洋洋得意的时候,看见谢娜发了三个月前立的修炼马甲线的成果图,清晰可见的马甲线,看得

    加入公众号
    加入公众号