...
将系统部署到外网后,移动端可以通过外网访问,但PC不能通过外网访问。
注意:本示例来源于实际项目,原始版本是V6,可作为参考性质,也许是不能运行的。
实现方案:
1,添加系统选项配置限制访问的地址,请见新增系统选项;
2,使用过滤器拦截用户请求,如果发现请求的地址不是上面系统选项配置的,并且设备是PC,就重定向到一个提示页面,提示只能通过移动设备使用,过滤器的配置请见扩展插件开发基础(内含目录及配置文件介绍)中的插件声明文件extension.xml的说明;
“限制访问的地址”项,设置为Smartbi部署所在的IP地址后,即可达到上述要求。
...
代码块 | ||||
---|---|---|---|---|
| ||||
var ConfigurationPatch = { extensionPoints : { SystemConfig : { configItem : [ { tabName : "公共设置", groupName : "公共设置", itemNumber : 99999, className : "bof.ext.configitems.ItemLimitAddr" } ] } } }; |
...
2.3 编写过滤器拦截处理:
代码块 | ||||
---|---|---|---|---|
| ||||
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { LOG.debug("该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.debug("ip:" + ip + ",value:" + value); if (ip.equals(value)) { String requestHeader = request.getHeader("user-agent"); if (LimitAddrFilter.isMobileDevice(requestHeader)) { LOG.debug("使用手机浏览器"); filterChain.doFilter(servletRequest, servletResponse); } else { LOG.debug("使用web浏览器"); response.sendRedirect(request.getContextPath() + "/error/error404.jsp"); return; } } else { filterChain.doFilter(servletRequest, servletResponse); } } |
...