zoukankan      html  css  js  c++  java
  • springboot前后端交互-跨域解决方案

    在启动类中加入下面的bean创建

    @Bean
        public WebMvcConfigurer corsConfigurer() {
            return new WebMvcConfigurer() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/**")
                            .allowCredentials(true)
                            .allowedOrigins("*")
                            .allowedMethods("GET", "POST");
                }
            };
        }
    

    如果是response返回内容跨域需要加上下面的代码

    package com.izkml.energy.score.interceptor;
    
    import org.springframework.lang.Nullable;
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     * @author fanghui
     * @date 2020-06-05 9:01
     * @Description:
     */
    @Component
    public class LoginInterceptor implements HandlerInterceptor {
        //这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            //每一个项目对于登陆的实现逻辑都有所区别,我这里使用最简单的Session提取User来验证登陆。
            HttpSession session = request.getSession();
            //这里的User是登陆时放入session的
            Object organName = session.getAttribute("loginName");
            //如果session中没有user,表示没登陆
            if (organName == null) {
                //这个方法返回false表示忽略当前请求,如果一个用户调用了需要登陆才能使用的接口,如果他没有登陆这里会直接忽略掉
                //当然你可以利用response给用户返回一些提示信息,告诉他没登陆
                //解决跨域问题
                response.addHeader("Access-Control-Allow-Origin", "*");
                response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
                response.addHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
                response.addHeader("Access-Control-Max-Age", "3600");
                response.getWriter().write("401");
                return false;
            } else {
                return true;    //如果session里有user,表示该用户已经登陆,放行,用户即可继续调用自己需要的接口
            }
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        }
    

    }

    认真可以把事情做对,而用心却可以做到完美
  • 相关阅读:
    JTree单击事件
    hibernate、easyui、struts2整合
    ubuntu中wifi显示被硬件禁用的解决方法
    idea导入svn项目
    Intellij IDEA常用配置详解
    HBase 写优化之 BulkLoad 实现数据快速入库
    Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势
    avro序列化详细操作
    wordcount代码实现详解
    idea配置maven
  • 原文地址:https://www.cnblogs.com/fangh816/p/13295060.html
Copyright © 2011-2022 走看看