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以前。
* 系统本身并没有版本控制机制,而是通过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() { } }