美文网首页
解决SSM+VUE对接跨域问题

解决SSM+VUE对接跨域问题

作者: 小佳佳K3 | 来源:发表于2020-07-24 17:26 被阅读0次

    环境配置

    JDK:1.8 MAVEN:3.6.1 IDE:19.3 TOMCAT:8 MYSQL:5.7 swagger-ui2
    

    基本框架搭建

    可参考本人博客地址
    基本SSM框架搭建

    https://blog.csdn.net/qq_41998978/article/details/103362147
    

    SSM前后分离配置

    https://blog.csdn.net/qq_41998978/article/details/104248826
    

    解决SSM+VUE跨域问题

    配置过滤器

    在WEB.XML文件中加入一个过滤器

    <filter>
        <filter-name>SimpleCORSFilter</filter-name>
        <!-- 指向自己的类-->
        <filter-class>com.item.utile.SimpleCORSFilter</filter-class>
        <init-param>
          <param-name>IsCross</param-name>
          <param-value>true</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>SimpleCORSFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    

    创建SimpleCORSFilter,过滤器指向文件

    package com.item.utile;
    
    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.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class SimpleCORSFilter implements Filter {
        private boolean isCross = false;
    
        @Override
        public void destroy() {
            isCross = false;
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            if (isCross) {
                HttpServletRequest httpServletRequest = (HttpServletRequest) request;
                HttpServletResponse httpServletResponse = (HttpServletResponse) response;
                System.out.println("拦截请求: " + httpServletRequest.getServletPath());
                httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
                httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
                httpServletResponse.setHeader("Access-Control-Max-Age", "0");
                httpServletResponse.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,token");
                httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
                httpServletResponse.setHeader("XDomainRequestAllowed", "1");
            }
            chain.doFilter(request, response);
        }
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            String isCrossStr = filterConfig.getInitParameter("IsCross");
            isCross = isCrossStr.equals("true") ? true : false;
            System.out.println(isCrossStr);
        }
    
    }
    

    spring-mvc文件加入,spring版本4.0以上

    <mvc:cors>
            <mvc:mapping path="/**"
                         allowed-origins="*"
                         allowed-methods="POST, GET, OPTIONS, DELETE, PUT"
                         allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
                         allow-credentials="true" />
        </mvc:cors>
    

    若出现问题

    Controller文件加入注解

    @RestController
    @CrossOrigin
    

    接口加入,返回json

    @ResponseBody
    

    解决返回json时,是格式的问题

    pom.xml文件加入

        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.9.2</version>
        </dependency>
    

    实体类时间属性加入注解

        /**
         * 创建时间
         */
        @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
        private Date creationtime;
    

    相关文章

      网友评论

          本文标题:解决SSM+VUE对接跨域问题

          本文链接:https://www.haomeiwen.com/subject/mukslktx.html