项目背景是使用springboot做开发,中间要做一层验证,因此打算使用filter中去做一个拦截验证
废话不多说,直接上代码
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.context.support.XmlWebApplicationContext;
import com.alibaba.fastjson.JSONObject;
import com.pactera.vds.mobile.service.UserService;
public class LoginFilter implements Filter {
private UserService userservice;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
ServletContext sct = filterConfig.getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext) WebApplicationContextUtils
.getWebApplicationContext(sct);
if (cxt != null && cxt.getBean("userservice") != null && userservice == null) {
userservice = (UserService) cxt.getBean("userservice");
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
JSONObject json = (JSONObject) req.getSession().getAttribute("user");
if (json == null || json.isEmpty()) {
if (req.getRequestURI().contains("/sign/rz") || req.getRequestURI().contains("/sign/wxLogin")
|| req.getRequestURI().contains("/sign/callBack") || req.getRequestURI().contains("/sign/sendSms")
|| req.getRequestURI().contains("/sign/register")) {// 初次登陆请求中没有,放行
chain.doFilter(request, response);
} else {
resp.sendRedirect("http://bmp.bofide.com/qd/binding");
}
} else {
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}
拦截器项目初始化时候直接使用init方法进行加载bean对象,如果通过@Autowired注入的server在filter中使用的时候会报空,因为还没有注入bean容器,这时就要求我们提前手动加载。用以上形式就可以完美解决,同理用这样的方式还可以提前注入自己享用的bean对象。