毕设之路(三)前后端分离下 LayUI 产生的跨域问题导致无法携带 Header 请求后台解决方案

在使用 LayUI 的时候,由于采用前后端分离的模式进行开发,会遇到跨域问题。

跨域问题表现在:无法将用户信息从前端传递到后端去,导致服务器无法标识客户端的身份,为采用 JWT 的方式校验用户身份,跨域问题成了必须解决的一个难题。

首先,服务端必须进行跨域配置,此处必须配置两个地方:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedHeaders("*")
                .allowedMethods("*")
                .allowCredentials(true)
                .allowedOrigins("client address");
    }
}

自定义过滤器,该拦截器的作用:跨域请求会进行两次请求,分别是 OPTIONS 和 真正请求,只有在 OPTIONS 通过以后,才会发起真正的请求。该过滤器就是保证了两次请求的成功。

package top.smallpineapple.salecarsystem.filter;

@Component
public class SecondOrigionRequestFilter implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("Origin"));
        httpResponse.setHeader("Access-Control-Allow-Methods", httpRequest.getMethod());
        httpResponse.setHeader("Access-Control-Max-Age", "3600");
        httpResponse.setHeader("Access-Control-Allow-Headers", httpRequest.getHeader("Access-Control-Request-Headers"));
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}

在这里插入图片描述

然后在 LayUI 中,由于数据表格无法进行跨域请求,我们需要修改源码,在 table.js 文件中找到 .ajax 开始的代码,在内部添加上这一行:

crossDomain:true

在数据表格发起请求以及其它的 GET/POST 请求中,我们同样也要加上上面这一行,之后就可以携带 Header 进行请求,解决了 JWT 中的 token 传递给后端的需求。

注意:该跨域只对 GET 和 POST 请求开放,PUT 和 DELETE 请求暂测不过,不过 GET 和 POST 在个人开发的时候已经够用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值