/**
* 任意请求转发处理过滤器
*/
@Component
public class RequestTransmitFilter implements Filter {
@Autowired
private OkHttpHelper okHttpHelper;
/**
* springboot初始化bean的顺序为:listener -> filter -> servlet -> 普通bean
* 所以无法在filter中注入普通的bean,只能通过init方法中手工进行bean注入
*
* @param filterConfig
* @throws ServletException
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
ServletContext servletContext = filterConfig.getServletContext();
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
okHttpHelper = applicationContext.getBean(OkHttpHelper.class);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest servletRequest = (HttpServletRequest) request;
HttpServletResponse servletResponse = (HttpServletResponse) response;
//设置响应头
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setContentType("application/json;charset=utf-8");
//发起请求,获取响应
OkResponseWrap okResponseWrap = this.okHttpHelper.execute((HttpServletRequest) request);
PrintWriter out = null;
try {
out = servletResponse.getWriter();
//设置响应
if (!CollectionUtils.isEmpty(okResponseWrap.getHeaders())) {
okResponseWrap.getHeaders().get("Set-Cookie").forEach(cookie -> {
servletResponse.addHeader("Set-Cookie", cookie);
});
}
servletResponse.setStatus(okResponseWrap.getCode());
out.write(String.valueOf(okResponseWrap.getBody()));
out.flush();
} catch (Exception e) {
//服务器异常
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
}
}
@Override
public void destroy() {
}
}