java跨域请求的方式

1、基于servlet和过滤器的方式

/**
 * 设置跨域请求相关参数的过滤器
 * @Author LQY
 * @Date 2018/12/3
 */
@WebFilter("/*")
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse resp = (HttpServletResponse)response;
        req.setCharacterEncoding("utf-8");
        //设置哪些域可以跨域访问,*代表所有域
        resp.setHeader("Access-Control-Allow-Origin","*");
        //设置支持那种访问方法
        resp.setHeader("Access-Control-Allow-Methods","POST,GET,OPTIONS,DELETE");
        chain.doFilter(request,response);
    }
}
/**
 * @Author LQY
 * @Date 2018/12/3
 */
@WebServlet("/UserLogin")
public class LoginServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String userName = req.getParameter("userName");
        String password = req.getParameter("password");
        System.out.println(userName+":"+password);
        resp.setContentType("text/html;charset=utf-8");
        if("user".equals(userName) && "123".equals(password)){
            resp.getWriter().print("success");
        }else{
            resp.getWriter().print("fail");
        }
    }
}

前端页面发起ajax请求

<script>
            $(‘#loginBtn‘).on(‘click‘,function(){
                var formData = $("#f1").serialize();
                $.ajax("http://localhost:8080/UserLogin",{
                    type:"post",
                    data:formData,
                    success:function(data){
                        alert(data);
                    }
                })
            })
</script>

2、springmvc通过@CrossOrigin注解设置跨域请求

设置在方法上:

/**
 * @Author LQY
 * @Date 2018/12/3
 */
@RestController
public class LoginController {
    /**
     * @CrossOrigin注解用来配置跨域请求,第一个参数origins表示那些域名可以跨域访问这个方法,
     * 第二个参数表示表示支持哪些访问的方法。
     * @return
     */
    @RequestMapping("/UserLogin")
    @CrossOrigin(origins = "*",methods = {RequestMethod.GET,RequestMethod.POST,RequestMethod.DELETE,RequestMethod.PUT})
    public String userLogin(String userName, String password){
        if("user1".equals(userName) && "6666".equals(password)){
            return "success";
        }else{
            return "fail";
        }
    }
}

设置在controller上:

package edu.nf.demo2.controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * @CrossOrigin标注在类上表示当前类的所有方法都支持跨域访问,
 * 标注在方法上时表示当前的请求处理方法支持跨域,但会合并属性配置。
 * 注意,这种方式的配置只对当前类有效,对其他的Controller是不起作用的,
 * 如果需要所有的Controller都支持跨域访问,那么可以配置全局的跨域访问
 * (通过xml或者是java配置)
 * @Author LQY
 * @Date 2018/12/3
 */
@RestController
@CrossOrigin(origins = "*",methods = {RequestMethod.GET,RequestMethod.POST,RequestMethod.DELETE,RequestMethod.PUT})
public class LoginController {
    /**
     * @CrossOrigin注解用来配置跨域请求,第一个参数origins表示那些域名可以跨域访问这个方法,
     * 第二个参数表示表示支持哪些访问的方法。
     * @return
     */
    @RequestMapping("/UserLogin")
    public String userLogin(String userName, String password){
        if("user1".equals(userName) && "6666".equals(password)){
            return "success";
        }else{
            return "fail";
        }
    }
}

通过xml配置文件配置全局的跨域访问

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <context:component-scan base-package="edu.nf.demo2.controller"/>

    <mvc:annotation-driven/>

    <mvc:default-servlet-handler/>
    <!-- 全局的跨域访问配置 -->
   <mvc:cors>
        <!--&lt;!&ndash; /** 表示所有请求都将支持跨域方法 &ndash;&gt;-->
        <mvc:mapping path="/**" allowed-origins="*" allowed-methods="GET,POST,PUT,DELETE"/>
   </mvc:cors>
</beans>

原文地址:https://www.cnblogs.com/nisiweiLIQIYONG/p/10062485.html

时间: 2024-08-10 13:04:53

java跨域请求的方式的相关文章

审视跨域请求实现方式

之前在组内进行过相关分享,为防止以后再单独整理,故在此将自己的PPT内容存放下. 问题产生 在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源策略). 同源与非同源的区别: 1.协议 2.域名 3.端口号 三者必须相同,才能称为"同源"! 实际中的问题 Ajax通过XMLHttpRequest发起请求,而XMLHttpRequest则受制于同源策略. 解决方式 原理追踪 "callback"的

HTML5跨域请求--POST方式

var xmlHttp; // Create the XHR object. function createCORSRequest(method, url) { var xhr = new XMLHttpRequest(); if ("withCredentials" in xhr) { // XHR for Chrome/Firefox/Opera/Safari. xhr.open(method, url, true); } else if (typeof XDomainReques

jsonp跨域请求的方式

1.jsonp一种请求方式.用于解决一个棘手的问题: 由于浏览器具有同源策略:即可以通过后台去访问其他网站,而不能通过浏览器(ajax请求)访问其他网页或域(阻止ajax请求,但是无法阻止<script src="">请求,所有带src属性的都不阻止 巧妙的实现方式: 创建一个<script>标签,设置它的src属性为需要访问的地址,返回的数据必须是json格式的.只能发get请求 实现原理: 在src里面带一个callback=fun参数,参数的值是需要服务端

跨域请求的3种方式

视频教程 跨域请求的方式:3种 1.后台代理 2.jsonp 3.HTML5中的XHR2 需要前端会的方法是后两种. 2.jsonp使用方法:只支持get方式 $.ajax({dataType:"jsonp",jsonp:"callback",success:...,error:...});//前台,修改数据类型,定义jsonp属性和参数名,等待后台调用 var request=$_GET("callback");//后台,接收前台定义好的参数名

八种方式实现跨域请求

浏览器的同源策略 ? 提到跨域不能不先说一下"同源策略". ? 何为同源?只有当协议.端口.和域名都相同的页面,则两个页面具有相同的源.只要网站的 协议名protocol. 主机host. 端口号port 这三个中的任意一个不同,网站间的数据请求与传输便构成了跨域调用,会受到同源策略的限制. ? 同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互.这是一个用于隔离潜在恶意文件的关键的安全机制.浏览器的同源策略,出于防范跨站脚本的攻击,禁止客户端脚本(如 JavaScr

jQuery jsonp跨域请求详解

跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具有相同的源,否则就是不同源的. 如果要在js里发起跨域请求,则要进行一些特殊处理了.或者,你可以把请求发到自己的服务端,再通过后台代码发起请求,再将数据返回前端. 这里讲下使用jquery的jsonp如何发起跨域请求及其原理. 先看下准备环境:两个端口不一样,构成跨域请求的条件. 获取数据:获取数据

Java跨域问题的处理

1,JavaScript由于安全性方面的考虑,不允许页面跨域调用其他页面的对象,那么问题来了,什么是跨域问题? 答:这是由于浏览器同源策略的限制,现在所有支持JavaScript的浏览器都使用了这个策略.那么什么是同源呢?所谓的同源是指三个方面"相同": (1)域名相同 (2)协议相同 (3)端口相同 上述三个方面均相同属于同源,JavaScript默认在同源范围内才允许通信.我们接下来通过不同的URL认识同源和跨域问题: http://www.a.com/a.js http://ww

jQuery jsonp跨域请求

跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具有相同的源,否则就是不同源的. 如果要在js里发起跨域请求,则要进行一些特殊处理了.或者,你可以把请求发到自己的服务端,再通过后台代码发起请求,再将数据返回前端. 这里讲下使用jquery的jsonp如何发起跨域请求及其原理. 先看下准备环境:两个端口不一样,构成跨域请求的条件. 获取数据:获取数据

jQuery中Ajax+Spring MVC实现跨域请求

项目开发中,某个可独立.也可集成的子业务模块须要向外开放相关API接口,先说下项目本身使用了jersery来实现RESTful webservice以名词形式公布API.有意思的是在实际的操作中同事却通过Ajax跨域请求的方式去调用该API,先不说成功与否,这样的方式本就是"滑稽"的.和他一起探讨了此种做法的不合理性,之后选择jersey client的方式进行远程调用.只是他在跨域请求中遇到了问题,自己闲暇时间予以解决,这才是此篇文章的由来. jQuery对跨域请求有两种解决方式各自