使用的是Springboot1.3的。
已知,写了一个filter的文件,实现访问的拦截。本地访问时,这个filter可以正常工作。可是,如果是非本地的访问,这个filter并没有被调用到(就是其他的系统来访问本地的系统,调用本地系统API)。如果,不是通过非本地的系统进行访问,而是直接在浏览器的地址栏输入(例如http://xxxxxxxx/getxx这样的),filter可以被正常的调用,实现了拦截。
请问这是个什么原因呢?(不知道是不是跟Springboot有关。。。)
下面是filter的代码
@WebFilter(urlPatterns = "/*", filterName = "CorsFilter")
public class CorsFilterTest implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("过滤器销毁");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
httpServletResponse.addHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
httpServletResponse.addHeader("Access-Control-Allow-Headers", "Content-Type");
httpServletResponse.addHeader("Access-Control-Max-Age", "1800");//30 min
System.out.println("执行过滤操作");
chain.doFilter(request, httpServletResponse);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("过滤器初始化");
}
}
下面是注册filter的:
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
CorsFilterTest corsFilter = new CorsFilterTest();
registrationBean.setFilter(corsFilter);
List<String> urlPatterns = new ArrayList<String>();
urlPatterns.add("/**");
registrationBean.setUrlPatterns(urlPatterns);
return registrationBean;
}
请路过的大大,抽空看看,这是个什么问题,谢谢!
非本地的系统【非本地的访问,这个filter并没有被调用到(就是其他的系统来访问本地的系统,调用本地系统API)】调用你的url请求,是如何解决跨越问题的,跨域与Filter是不是有冲突存在?
可以参考哈这些问答讨论,看能否解决你的问题。http://ask.csdn.net/questions/379944