java 使用纯servlet的方式解决前后端分离跨域问题

以前都是自己一个人写东西,建一个web项目然后刷刷刷的写,前端部分也自己刷刷刷的写,从来没碰到过跨域问题,最近公司项目,前后端分离,我写好接口给前端的老哥,发现用ajax怎么请求都没有用,每次都是说什么请求头的问题,把请求头删掉,没报错了,但是什么信息都不来,前面一直以为是前端的代码有问题,后面才知道是跨域,大爷的,然后网上搜,全是什么反向代理巴啦啦的,我他妈又不知道这东西怎么玩,我就一安卓,写前端那老哥也是安卓,两安卓在这写这鸡儿,我个后端只会用数据库框架,其他什么spring全家桶都不会,他大爷神烦,只会用servlet,然后我就找找找总算被我找到了就一行代码,解决前后端跨域。。。。去你妈的反向代理。

Response.setHeader("Access-Control-Allow-Origin", "*");

没错就是这句,加上这句前端请求接口,正常。

后面帮苦逼的写前端的安卓老哥写前端逻辑,碰到访问本地图片访问不了,又冒出个鬼跨域。。。当时就想打人,然后我只能把图片放后端,使用io流…加上上面那句代码,ok完美解决。

public class ImageGetApi extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("Access-Control-Allow-Origin", "*");
        InputStream in=this.getServletContext().getResourceAsStream("/img/car.png");
        byte buffer[]=new byte[1024];//设置缓冲区
        int len=0;
        try {
            OutputStream out=resp.getOutputStream();
            while((len=in.read(buffer))>0){
                out.write(buffer,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

去你妈的臭嗨

在Spring Boot框架中,解决跨域问题可以通过自定义过滤器来实现。下面是一个简单的示例: ```java @Component public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest request = (HttpServletRequest) req; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Content-Length, X-Requested-With"); if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); } else { chain.doFilter(req, res); } } @Override public void init(FilterConfig filterConfig) {} @Override public void destroy() {} } ``` 在上面的代码中,我们创建了一个名为"CorsFilter"的过滤器。该过滤器实现了javax.servlet.Filter接口,并覆盖了doFilter方法,用于处理跨域请求。 在doFilter方法中,我们首先将ServletResponse类型的res转换为HttpServletResponse类型的response,将ServletRequest类型的req转换为HttpServletRequest类型的request。然后,我们设置了Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Max-Age和Access-Control-Allow-Headers等响应头信息,以允许跨域请求。 最后,我们判断当前请求是否为OPTIONS请求,如果是,我们设置响应状态码为HttpServletResponse.SC_OK,否则我们继续执行过滤器链中的下一个过滤器。 在上面的示例中,我们将"Access-Control-Allow-Origin"设置为"*",表示接受来自任何域名的跨域请求。如果你希望限制跨域请求来源,可以将该值设置为具体的域名。 然后,我们将"Access-Control-Allow-Methods"设置为"POST, GET, OPTIONS, DELETE, PUT",表示接受这些HTTP方法的跨域请求。如果你希望限制跨域请求使用的HTTP方法,可以将该值设置为具体的HTTP方法。 最后,我们设置了"Access-Control-Allow-Headers",表示接受这些自定义请求头的跨域请求。如果你希望限制跨域请求使用的自定义请求头,可以将该值设置为具体的请求头。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值