后端解决跨域

本文介绍了一种前端JavaScript调用后端服务器进行OCR文字识别的方法,详细展示了使用AJAX发送POST请求到本地服务器的代码示例,并解释了服务器端如何处理Base64编码的图片数据,返回JSON格式的识别结果。
方式:
js前端请求:
function getOcrInfo(imageData){
$.ajax({
   url: 'http://localhost:8080/LSWS/ws/ocr/getWebImageRecognitionJsonStringByBase64Image',
   type: 'post',
   dataType:'json',
   //async:false,
   data: {
        "imageData" : imageData
   },
   success:function(data){
      if(data.flag==0){
       var name=decodeURIComponent(data.name);
   var position=decodeURIComponent(data.position);

      }else{
      FR.Msg.alert("错误提示","获取识别结果失败,请重试!");
      } 
      
   },
   error:function(data){
       FR.Msg.alert("错误提示","获取识别结果失败,请重试!");
   }
});
服务器后端:
@RequestMapping(value="/getWebImageRecognitionJsonStringByBase64Image", method = RequestMethod.POST)
@ResponseBody
public String getWebImageRecognitionJsonStringByBase64Image(HttpServletRequest request,HttpServletResponse response,String imageData) {
String result = "";
//System.out.println(imageData);
try{
WebImageRecognition gr = new WebImageRecognition();
result = gr.getWebImageRecognitionJsonObjectByBase64Image(imageData);

response.addHeader("Access-Control-Allow-Origin", "*");   //用于ajax post跨域(*,最好指定确定的http等协议+ip+端口号)
response.setCharacterEncoding("utf-8");
//response.getWriter().write(result);
//response.getWriter().close();
}catch(Exception e){
e.printStackTrace();
logger.error("getGeneralRecognition:"+e);
result = "{\"flag\":\"1\",\"errorMessage\":\"server change error at OcrController!\"}";
}
   return result;
}



2、CORS 请求(可以发送跨域的post、put、get等请求) 
在JSP或者Java代码中设置response的响应头 
下面是是用过滤器简单的实现跨域请求放行

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

public class TestFilter implements Filter {

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse servletResponse,
            FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        response.setHeader("Access-Control-Allow-Origin","*");
        response.setHeader("Access-Control-Allow-Methods","GET,POST,PUT,OPTIONS");
        response.setHeader("Access-Control-Allow-Credentials","true");
        chain.doFilter(request, response);
        System.out.println(" **********************CROS  执行了 **********************");
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}
在web.xml中配置相应的拦截路径

    <filter>
        <filter-name>webAppW</filter-name>
        <filter-class>com.TestFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>webAppW</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
--------------------- 
作者:启示收藏 
来源:优快云 
原文:https://blog.youkuaiyun.com/u012737182/article/details/62041890 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

转载于:https://www.cnblogs.com/tianxuwei/p/10478964.html

Java后端开发中,问题通常是指在Web应用程序中,前端页面与后端服务器进行交互时,由于浏览器的同源策略限制,导致不同源之间的请求被阻止的问题。同源策略要求协议、名和端口都相同才能进行交互。为了解决这个问题,可以采用以下几种方法: 1. JSONP(JSON with Padding): JSONP是一种古老的技术,它利用`<script>`标签不受同源策略限制的特性来实现请求。服务器端需要提供一个回调函数来包裹JSON数据,前端则通过动态创建`<script>`标签的方式发起请求。但JSONP只支持GET请求,且存在安全隐患。 2. CORS(源资源共享): CORS是一种现代的、标准的解决方案。后端需要在响应头中添加`Access-Control-Allow-Origin`字段,指定哪些名可以访问资源。如果需要接受特定的HTTP请求头或者POST请求,还需要设置`Access-Control-Allow-Headers`和`Access-Control-Allow-Methods`。CORS支持所有类型的HTTP请求。 3. 使用代理服务器: 在前端和后端之间设置一个代理服务器,前端将请求发送到代理服务器,代理服务器转发请求到后端服务器。后端服务器将响应返回给代理服务器,然后由代理服务器转发给前端。这种方式对前端透明,只在服务器端做改动。 4. 使用过滤器(Filter): 在Java后端可以使用过滤器来统一处理问题。例如在Spring框架中,可以创建一个全局的CORS配置类,重写`addCorsMappings`方法,在方法中配置允许的路径和相关设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值