package com.probiz.estorepf.authorityInterceptor;

import javax.servlet.http.HttpServletRequest;

public class HttpRequestDeviceUtils {
    /**Wap网关Via头信息中特有的描述信息*/
    private static String mobileGateWayHeaders[]=new String[]{
    "ZXWAP",//中兴提供的wap网关的via信息,例如:Via=ZXWAP GateWayZTE Technologies,
    "chinamobile.com",//中国移动的诺基亚wap网关,例如:Via=WTP/1.1 GDSZ-PB-GW003-WAP07.gd.chinamobile.com (Nokia WAP Gateway 4.1 CD1/ECD13_D/4.1.04)
    "monternet.com",//移动梦网的网关,例如:Via=WTP/1.1 BJBJ-PS-WAP1-GW08.bj1.monternet.com. (Nokia WAP Gateway 4.1 CD1/ECD13_E/4.1.05)
    "infoX",//华为提供的wap网关,例如:Via=HTTP/1.1 GDGZ-PS-GW011-WAP2 (infoX-WISG Huawei Technologies),或Via=infoX WAP Gateway V300R001 Huawei Technologies
    "XMS 724Solutions HTG",//国外电信运营商的wap网关,不知道是哪一家
    "wap.lizongbo.com",//自己测试时模拟的头信息
    "Bytemobile",//貌似是一个给移动互联网提供解决方案提高网络运行效率的,例如:Via=1.1 Bytemobile OSN WebProxy/5.1
    };
    /**电脑上的IE或Firefox浏览器等的User-Agent关键词*/
    private static String[] pcHeaders=new String[]{
    "Windows 98",
    "Windows ME",
    "Windows 2000",
    "Windows XP",
    "Windows NT",
    "Ubuntu"
    };
    /**手机浏览器的User-Agent里的关键词*/
    private static String[] mobileUserAgents=new String[]{
    "Nokia",//诺基亚,有山寨机也写这个的,总还算是手机,Mozilla/5.0 (Nokia5800 XpressMusic)UC AppleWebkit(like Gecko) Safari/530
    "SAMSUNG",//三星手机 SAMSUNG-GT-B7722/1.0+SHP/VPP/R5+Dolfin/1.5+Nextreaming+SMM-MMS/1.2.0+profile/MIDP-2.1+configuration/CLDC-1.1
    "MIDP-2",//j2me2.0,Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaE75-1 /110.48.125 Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML like Gecko) Safari/413
    "CLDC1.1",//M600/MIDP2.0/CLDC1.1/Screen-240X320
    "SymbianOS",//塞班系统的,
    "MAUI",//MTK山寨机默认ua
    "UNTRUSTED/1.0",//疑似山寨机的ua,基本可以确定还是手机
    "Windows CE",//Windows CE,Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)
    "iPhone",//iPhone是否也转wap?不管它,先区分出来再说。Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; zh-cn) AppleWebKit/532.9 (KHTML like Gecko) Mobile/8B117
    "iPad",//iPad的ua,Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; zh-cn) AppleWebKit/531.21.10 (KHTML like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10
    "Android",//Android是否也转wap?Mozilla/5.0 (Linux; U; Android 2.1-update1; zh-cn; XT800 Build/TITA_M2_16.22.7) AppleWebKit/530.17 (KHTML like Gecko) Version/4.0 Mobile Safari/530.17
    "BlackBerry",//BlackBerry8310/2.7.0.106-4.5.0.182
    "UCWEB",//ucweb是否只给wap页面? Nokia5800 XpressMusic/UCWEB7.5.0.66/50/999
    "ucweb",//小写的ucweb貌似是uc的代理服务器Mozilla/6.0 (compatible; MSIE 6.0;) Opera ucweb-squid
    "BREW",//很奇怪的ua,例如:REW-Applet/0x20068888 (BREW/3.1.5.20; DeviceId: 40105; Lang: zhcn) ucweb-squid
    "J2ME",//很奇怪的ua,只有J2ME四个字母
    "YULONG",//宇龙手机,YULONG-CoolpadN68/10.14 IPANEL/2.0 CTC/1.0
    "YuLong",//还是宇龙
    "COOLPAD",//宇龙酷派YL-COOLPADS100/08.10.S100 POLARIS/2.9 CTC/1.0
    "TIANYU",//天语手机TIANYU-KTOUCH/V209/MIDP2.0/CLDC1.1/Screen-240X320
    "TY-",//天语,TY-F6229/701116_6215_V0230 JUPITOR/2.2 CTC/1.0
    "K-Touch",//还是天语K-Touch_N2200_CMCC/TBG110022_1223_V0801 MTK/6223 Release/30.07.2008 Browser/WAP2.0
    "Haier",//海尔手机,Haier-HG-M217_CMCC/3.0 Release/12.1.2007 Browser/WAP2.0
    "DOPOD",//多普达手机
    "Lenovo",// 联想手机,Lenovo-P650WG/S100 LMP/LML Release/2010.02.22 Profile/MIDP2.0 Configuration/CLDC1.1
    "LENOVO",// 联想手机,比如:LENOVO-P780/176A
    "HUAQIN",//华勤手机
    "AIGO-",//爱国者居然也出过手机,AIGO-800C/2.04 TMSS-BROWSER/1.0.0 CTC/1.0
    "CTC/1.0",//含义不明
    "CTC/2.0",//含义不明
    "CMCC",//移动定制手机,K-Touch_N2200_CMCC/TBG110022_1223_V0801 MTK/6223 Release/30.07.2008 Browser/WAP2.0
    "DAXIAN",//大显手机DAXIAN X180 UP.Browser/6.2.3.2(GUI) MMP/2.0
    "MOT-",//摩托罗拉,MOT-MOTOROKRE6/1.0 LinuxOS/2.4.20 Release/8.4.2006 Browser/Opera8.00 Profile/MIDP2.0 Configuration/CLDC1.1 Software/R533_G_11.10.54R
    "SonyEricsson",// 索爱手机,SonyEricssonP990i/R100 Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; 405) Opera 8.65 [zh-CN]
    "GIONEE",//金立手机
    "HTC",//HTC手机
    "ZTE",//中兴手机,ZTE-A211/P109A2V1.0.0/WAP2.0 Profile
    "HUAWEI",//华为手机,
    "webOS",//palm手机,Mozilla/5.0 (webOS/1.4.5; U; zh-CN) AppleWebKit/532.2 (KHTML like Gecko) Version/1.0 Safari/532.2 Pre/1.0
    "GoBrowser",//3g GoBrowser.User-Agent=Nokia5230/GoBrowser/2.0.290 Safari
    "IEMobile",//Windows CE手机自带浏览器,
    "WAP2.0"//支持wap 2.0的
    };
    /**
     * 根据当前请求的特征,判断该请求是否来自手机终端,主要检测特殊的头信息,以及user-Agent这个header
     * @param request http请求
     * @return 如果命中手机特征规则,则返回对应的特征字符串
     */
     public static boolean isMobileDevice(HttpServletRequest request){
         boolean b = false;
         boolean pcFlag = false;
         boolean mobileFlag = false;
         String via = request.getHeader("Via");
         String userAgent = request.getHeader("user-agent");
         for (int i = 0; via!=null && !via.trim().equals("") && i < mobileGateWayHeaders.length; i++) {
             if(via.contains(mobileGateWayHeaders[i])){
                 mobileFlag = true;
                 break;
             }
         }
         for (int i = 0;!mobileFlag && userAgent!=null && !userAgent.trim().equals("") && i < mobileUserAgents.length; i++) {
             if(userAgent.contains(mobileUserAgents[i])){
                 mobileFlag = true;
                 break;
             }
         }
         for (int i = 0; userAgent!=null && !userAgent.trim().equals("") && i < pcHeaders.length; i++) {
             if(userAgent.contains(pcHeaders[i])){
                 pcFlag = true;
                 break;
             }
         }
         if(mobileFlag==true && pcFlag==false){
             b=true;
         }
         return b;//false pc  true shouji
     
     }
}

首选先创建一个过滤器

package com.probiz.estorepf.authorityInterceptor;
import java.io.IOException;  
 
import javax.servlet.Filter;  
import javax.servlet.FilterChain;  
import javax.servlet.FilterConfig;  
import javax.servlet.ServletException;  
import javax.servlet.ServletRequest;  
import javax.servlet.ServletResponse;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpServletResponseWrapper;  
import javax.servlet.http.HttpSession;

import com.probiz.estorepf.entity.AdminUsers;
 
 
public class SessionFilter implements Filter {  
      
    public FilterConfig config;  
      
    public void destroy() {  
        this.config = null;  
    }  
      
    public static boolean isContains(String container, String[] regx) {  
        boolean result = false;  
 
        for (int i = 0; i < regx.length; i++) {  
            if (container.indexOf(regx[i]) != -1) {  
                return true;  
            }  
        }  
        return result;  
    }  
 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {  
          HttpServletRequest servletRequest = (HttpServletRequest) request;
                HttpServletResponse servletResponse = (HttpServletResponse) response;
                HttpSession session = servletRequest.getSession();
        
                // 获得用户请求的URI
                String path = servletRequest.getRequestURI();
                //System.out.println(path);
                
                // 从session里取员工工号信息
                AdminUsers empId = (AdminUsers) session.getAttribute("admin");
        
                /*创建类Constants.java,里面写的是无需过滤的页面
                for (int i = 0; i < Constants.NoFilter_Pages.length; i++) {
        
                    if (path.indexOf(Constants.NoFilter_Pages[i]) > -1) {
                        chain.doFilter(servletRequest, servletResponse);
                        return;
                   }
               }*/
                
               if(HttpRequestDeviceUtils.isMobileDevice(servletRequest)!=true){
               //对外的action无需过滤
               if(path.indexOf("/httpGetData.action") > -1){
                   chain.doFilter(servletRequest, servletResponse);
                   return;
               }
               if(path.indexOf("/addHttpGetPaymentData.action") > -1){
                   chain.doFilter(servletRequest, servletResponse);
                   return;
               }
               if(path.indexOf("/addHttpGetCiqnoData.action") > -1){
                   chain.doFilter(servletRequest, servletResponse);
                   return;
               }
               if(path.indexOf("/logins.jsp") > -1){
                   chain.doFilter(servletRequest, servletResponse);
                   return;
               }
               if(path.indexOf("/loginUser.action") > -1){
                   chain.doFilter(servletRequest, servletResponse);
                   return;
               }
               // 登陆页面无需过滤
               if(path.indexOf("/login.jsp") > -1) {
                   chain.doFilter(servletRequest, servletResponse);
                   return;
               }
               if(path.indexOf("/loginUsers.action") > -1) {
                   chain.doFilter(servletRequest, servletResponse);
                   return;
               }
               
        
               // 判断如果没有取到员工信息,就跳转到登陆页面
               if (empId == null || "".equals(empId.getUserLogin())) {
                   // 跳转到登陆页面
                   servletRequest.getRequestDispatcher("/login.jsp").forward(request,response);
                  // servletResponse.sendRedirect("login.jsp");
               } else {
                   // 已经登陆,继续此次请求
                   chain.doFilter(request, response);
               }
              }else{
               //对外的action无需过滤
//                  if(path.indexOf("/httpGetData.action") > -1){
//                      chain.doFilter(servletRequest, servletResponse);
//                      return;
//                  }
                  if(path.indexOf("/addHttpGetPaymentData.action") > -1){
                      chain.doFilter(servletRequest, servletResponse);
                      return;
                  }
                  if(path.indexOf("/logins.jsp") > -1){
                      chain.doFilter(servletRequest, servletResponse);
                      return;
                  }
                  if(path.indexOf("/loginUser.action") > -1){
                      chain.doFilter(servletRequest, servletResponse);
                      return;
                  }
                  // 判断如果没有取到员工信息,就跳转到登陆页面
                  if (empId == null || "".equals(empId.getUserLogin())) {
                      // 跳转到登陆页面
                      servletRequest.getRequestDispatcher("/logins.jsp").forward(request,response);
                  } else {
                      // 已经登陆,继续此次请求
                    chain.doFilter(servletRequest, servletResponse);
                    return;
                  }
              }
    }  
 
    public void init(FilterConfig filterConfig) throws ServletException {  
        config = filterConfig;  
    }  
}

在web.xml配置所需要的代码

<filter>  
        <filter-name>loginFilter</filter-name>
        <filter-class>com.probiz.estorepf.authorityInterceptor.SessionFilter</filter-class>  
    </filter>  
     <filter-mapping>  
        <filter-name>loginFilter</filter-name>  
        <url-pattern>*.jsp</url-pattern>  
    </filter-mapping>
    <filter-mapping>  
        <filter-name>loginFilter</filter-name>  
        <url-pattern>*.action</url-pattern>  
    </filter-mapping>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

filter 过滤器用户登录并判断是否属于电脑端或者手机端访问相关推荐

  1. jQuery判断页面是电脑端还是手机端

    //判断是否移动端 function isMobile() { var userAgentInfo = navigator.userAgent; var mobileAgents = ["A ...

  2. 判断浏览器是pc端还是手机端

    <script type="text/javascript">var browser = {versions: function() {var u = navigato ...

  3. PHP判断电脑端和手机端

    用作记录接受的项目用到的 也不清楚转载的地址 public function index(){$useragent = $_SERVER['HTTP_USER_AGENT'];if (preg_mat ...

  4. Spring Boot Filter过滤器 实现登录

    Spring Boot Filter过滤器 实现登录 Filter类 package com.citi.test;import java.io.IOException;import javax.ser ...

  5. VUE:解决判断网页端与手机端情况下,横竖屏无法判断的问题

    一.需求: 第一步:判断是网页端还是手机端 第二步:判断手机端,手机是横屏显示还是竖屏显示 二.解决方法: 监听网页端还是手机端 监听显示页面宽高变化 三.代码如下: methods: {_isMob ...

  6. TP3.2.x判断手机端访问并设置默认访问模块的方法 - ThinkPHP框架

    手机端访问时调用Wap手机模块,实现在手机端访问时展示出手机网站,无需跳转域名 首先我们在./Application/Common/Conf/ 目录下建立两个公共配置文件:config.php 和co ...

  7. JavaScript 代码判断:PC端和手机端

    js代码· 示下: <script> if ((navigator.userAgent.match(/(phone|pad|pod|iPad|iPod|iPhone|ios|Android ...

  8. python如何判断web访问来源是PC端还是手机端

    以下方法为判断web访问来源是PC端还是手机端 def judge_pc_or_mobile(ua):"""判断访问来源是pc端还是手机端:param ua: 访问来源头 ...

  9. js简单判断页面是否为手机端访问

    js判断页面是否为手机端访问 var ua = navigator.userAgent; var ipad = ua.match(/(iPad).*OS\s([\d_]+)/),     isIpho ...

最新文章

  1. margin折叠问题
  2. 集合的hashCode方法的最佳实现
  3. MySQL运行状态show status详解
  4. python转go感觉难_读《我为什么从python转向go》的一些感受
  5. win7功能找不到信息服务器,win7系统找不到Internet信息服务的解决方法
  6. MSSQL 2008 企业管理器打开命令
  7. Python数据分析入门(四)
  8. Spring应用上下文 - - context
  9. 用python实现单例模式_Python单例模式的两种实现方式
  10. 【java】Java运行时动态生成类几种方式
  11. Android-界面-布局
  12. Hownet在NLP领域内是什么样的地位?
  13. python doc转pdf
  14. Python Tkinter教程(一)——tkinter编程基本步骤、窗口基本属性及Toplevel控件的使用
  15. autoCAD 2008 Win7 64位, win8 64位 安装 燕秀工具箱 yanxiu.cui 文件下载
  16. 腾讯云不同账号之间VPC网络直接建立内网通讯
  17. 在企业工作一年多的几点感悟
  18. linux mint 使用软件管理器安装软件
  19. 新手小白建议收藏,美女剪30条视频,在西瓜头条赚了3000元
  20. 有什么适合学生党使用的无线蓝牙耳机?安卓平价蓝牙耳机推荐

热门文章

  1. abaqus形状记忆聚合物结构的热-力学有限元
  2. 苹果电脑怎么看系统属性?
  3. python提高照片分辨率_如何在python中提高图像的分辨率一个可能的解决方案?
  4. python读取json格式文件大量数据,以及python字典和列表嵌套用法详解
  5. python crypto模块详解_crypto
  6. 《梦断代码》摘录及感悟
  7. 【java】百行代码 实现2048小游戏
  8. Install Shield 脚本(总)
  9. 中大型企业采购管理的办法
  10. 如何做好WordPress网站的站内SEO优化?