1 概述
需求:
由于互联网可以直接通过WEB登陆并访问业务数据;需要限制外网通过Web访问报表系统,只能够是手机、Pad等设备访问
实现方案:
1,添加系统选项配置限制访问的地址;
2,使用过滤器拦截用户请求,如果发现请求的地址是上面系统选项配置的,并且设备是PC,就重定向到一个提示页面,提示只能通过移动设备使用
最终效果截图如下:
相应地址访问就会找不到该网址
2 编写修改代码
2.1 在ItemLimitAddr.js文件中添加系统选项配置限制访问的地址
var ItemLimitAddr = function() { this.itemName = "限制访问的地址"; this.dbKey = "NEW_SYSTEM_CONFIG_ItemLimitAddr"; };
2.2 编写过滤器拦截处理:
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("该url正在过滤。。。。。"); HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; servletRequest.setCharacterEncoding("UTF-8"); //获取系统选项的"限制访问的地址"的值 ConfigClientService cs = ConfigClientService.getInstance(); ISystemConfig sc = cs.getSystemConfig("NEW_SYSTEM_CONFIG_ItemLimitAddr"); String value = null; if(sc!=null){ value= sc.getValue(); } //获取访问的ip地址 String ip = request.getLocalAddr(); LOG.info("ip:"+ip+",value:"+value); if (ip.equals(value)) { String requestHeader = request.getHeader("user-agent"); if (LimitAddrFilter.isMobileDevice(requestHeader)) { System.out.println("使用手机浏览器"); filterChain.doFilter(servletRequest, servletResponse); } else { System.out.println("使用web浏览器"); response.sendRedirect(request.getContextPath()+"/404/404.jsp"); return; } } else { filterChain.doFilter(servletRequest, servletResponse); } }
3 相关资源