页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

将系统部署到外网后,移动端可以通过外网访问,但PC不能通过外网访问。

 注意:本示例来源于实际项目,原始版本是V6,可作为参考性质,也许是不能运行的。

实现方案:

1,添加系统选项配置限制访问的地址,请见新增系统选项

2,使用过滤器拦截用户请求,如果发现请求的地址不是上面系统选项配置的,并且设备是PC,就重定向到一个提示页面,提示只能通过移动设备使用,过滤器的配置请见扩展插件开发基础(内含目录及配置文件介绍)中的插件声明文件extension.xml的说明; 


“限制访问的地址”项,设置为Smartbi部署所在的IP地址后,即可达到上述要求。

...

代码块
languagejs
linenumberstrue
var ConfigurationPatch = {
	extensionPoints : {
		SystemConfig : {
			configItem : [ {
				tabName : "公共设置",
				groupName : "公共设置",
				itemNumber : 99999,
				className : "bof.ext.configitems.ItemLimitAddr"
			} ]
		}
	}
};

...


2.3 编写过滤器拦截处理:

代码块
languagejava
linenumberstrue
@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);
	}
}

...