如何在JAVA中利用Filter允许服务跨域请求

本篇文章给大家分享的是有关如何在JAVA中利用Filter允许服务跨域请求,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

创新互联建站-专业网站定制、快速模板网站建设、高性价比任丘网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式任丘网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖任丘地区。费用合理售后完善,十年实体公司更值得信赖。

Jsonp

 在前后端分离的项目中,会经常遇到需要跨域请求的问题。跨域请求有多种方式。之前接触过jsonp的方式。
 这种方式是在前端页面进行跨域请求兼容性好,但安全性比较差,只支持GET请求。

CORS

 Cross-Origin Resource Sharing 即跨源资源共享 。是一个新的 W3C 标准,它新增的一组HTTP首部字段,允许服务端其声明哪些源站有权限访问哪些资源。

 也就是说它允许浏览器向声明了 CORS 的跨域服务器,发出 XMLHttpReuest 请求,从而克服 Ajax 只能同源使用的限制。

Http头部字段介绍

 Access-Control-Allow-Origin:响应首部中可以携带这个头部表示服务器允许哪些域可以访问该资源
 Access-Control-Allow-Methods:该首部字段用于预检请求的响应,指明实际请求所允许使用的HTTP方法
 Access-Control-Allow-Headers:该首部字段用于预检请求的响应。指明了实际请求中允许携带的首部字段
 Access-Control-Max-Age:该首部字段用于预检请求的响应,指定了预检请求能够被缓存多久
 Access-Control-Allow-Credentials:该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器

具体实现

这里通过过滤器的方式对请求进行拦截。设置http的响应header来实现。

public class CrossFilter implements Filter {
  protected Logger logger = LoggerFactory.getLogger(getClass());
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
  }
  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request=(HttpServletRequest)servletRequest;
    HttpServletResponse response=(HttpServletResponse)servletResponse;
    logger.info("【允许跨域访问】refererUrl【{}】", request.getHeader("Referer"));
    //允许跨域访问
    response.setContentType("text/html;charset=UTF-8");
    response.setHeader("Access-Control-Allow-Origin", "https://monline.01zhuanche.com");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "0");
    response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,Authorization,SessionToken,JSESSIONID,token");
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("XDomainRequestAllowed","1");
    filterChain.doFilter(request, response);
  }
  public static String getRefererUrl(HttpServletRequest request){
    String returnValue = null;
    if(request != null && !StringUtils.isEmpty(request.getHeader("Referer"))) {
      returnValue = request.getHeader("Referer");
      String[] urls = returnValue.split("/");
      if(urls != null && urls.length > 3) {
        returnValue = urls[0] + "//" + urls[2];
      }
    }
    return returnValue;
  }
  @Override
  public void destroy() {
  }
}

此外需要对我们的过滤器进行配置,在web.xml文件中添加如下配置:


  crossDomainFilter
  com.open.advertise.api.cooperation.filter.CrossFilter
  
   targetFilterLifecycle
   true
  
 

 
  crossDomainFilter
  /* 
 

Java的特点有哪些

Java的特点有哪些 1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 2.Java具有简单性、面向对象、分布式、安全性、平台独立与可移植性、动态性等特点。 3.使用Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

以上就是如何在JAVA中利用Filter允许服务跨域请求,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


当前名称:如何在JAVA中利用Filter允许服务跨域请求
路径分享:http://ybzwz.com/article/gpeeoh.html