package com.iamberry.app.api.filters;

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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.iamberry.app.api.util.AppVersion;

/**
 * 版本控制器，当filter获取到了版本以后，通过req向下传递，可以通过req.getAttribute("v")获取，如果为空，表示请求的APP版本在1.2.5以前。	<br>
 * 系统本身并没有版本控制机制，而是通过Client 和 Server的互相约定，达到版本控制的功能。
 * @company	深圳爱贝源科技有限公司
 * @website www.iamberry.com
 * @author 	献
 * @tel		18271840547
 * @date	2016年12月13日
 */
@WebFilter(value = "/*")
public class VersionFilter implements Filter {

	private static Logger log = LoggerFactory.getLogger(VersionFilter.class);
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		
		HttpServletRequest req = (HttpServletRequest) request;
		
		// 解析App版本
		AppVersion v = AppVersion.parseUserAgent(req.getHeader("User-Agent") == null ? "" : req.getHeader("User-Agent"));
		req.setAttribute("v", v);
		
		// 日志
		log.info("【" + req.getRequestURI() + "】 " + v);
		
		// 向下转发
		chain.doFilter(req, response);
	}

	@Override
	public void destroy() {
	}
}
