解决跨域方案之一
springboot1.3
直接上代码
类1
public class RepeatableFilter implements Filter
{
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
}
@Override
public void doFilter(ServletRequest request, ServletResponse res, FilterChain chain)
throws IOException, ServletException
{
//设置跨域2
HttpServletResponse responses = (HttpServletResponse)res;
responses.setHeader("Access-Control-Allow-Origin","*");
responses.setHeader("Access-Control-Allow-Credentials", "true");
responses.setHeader("Access-Control-Allow-Methods", "*");
responses.setHeader("Access-Control-Max-Age", "72000");
responses.setHeader("Access-Control-Allow-Headers", "*");
ServletRequest requestWrapper = null;
if (request instanceof HttpServletRequest && StringUtils.equalsAnyIgnoreCase(request.getContentType(),
MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE))
{
requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, responses);
}
if (null == requestWrapper)
{
chain.doFilter(request, responses);
}
else
{
chain.doFilter(requestWrapper, responses);
}
}
@Override
public void destroy()
{
}
}
类2
public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
{
private final byte[] body;
public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
{
super(request);
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
body = HttpHelper.getBodyString(request).getBytes("UTF-8");
}
@Override
public BufferedReader getReader() throws IOException
{
return new BufferedReader(new InputStreamReader(getInputStream()));
}
@Override
public ServletInputStream getInputStream() throws IOException
{
final ByteArrayInputStream bais = new ByteArrayInputStream(body);
return new ServletInputStream()
{
@Override
public int read() throws IOException
{
return bais.read();
}
@Override
public boolean isFinished()
{
return false;
}
@Override
public boolean isReady()
{
return false;
}
@Override
public void setReadListener(ReadListener readListener)
{
}
};
}
}