首页 > 编程语言 > 详细

springMvc 实现跨域以及跨站

时间:2021-06-09 21:32:01      阅读:32      评论:0      收藏:0      [点我收藏+]

后端实现跨域的主流方法

  1. springMvc 4.2 以上 @CrossOrigin添加到对应需要跨域的接口类或方法上,不加任何参数默认是所有网站都可以访问!
  2. 通过拦截器、过滤器实现跨域,springMvc 4.2 以下,重写拦截器和过滤器即可。

这里说一下为什么可以直接用注解完成过滤却还要重写拦截器:

鄙人技术有限,在用拦截器做完登陆验证,无法通过拦截器实现未被拦截器拦截接口的跨域功能,故另辟蹊径使用注解完成未被拦截接口的跨域功能。

拦截器通常实现的功能:

  1. 登录验证,判断用户是否登录。
  2. 判断用户是否有权限访问资源,如校验token
  3. 记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。
  4. cookie、本地化、国际化、主题等。
  5. 监控请求处理时长等。

springMvc 接收到一个接口的顺序是: 过滤器 -> 拦截器 -> 最后才是控制器controller

拦截器重写示例:

public class isLoginInterceptor implements HandlerInterceptor {
    //在请求处理的方法之前执行
    //如果返回true执行下一个拦截器
    //如果返回false就不执行下一个拦截器
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("---------------处理前---------------");
        // System.out.println(request.getHeader(HttpHeaders.ORIGIN) + "origin"); 
        // System.out.println(request.getMethod());
        if (request.getHeader(HttpHeaders.ORIGIN) != null) {
            //支持跨域这里手动为相应包添加允许跨域的属性,只对浏览器的options预先请求生效
            response.addHeader("Access-Control-Allow-Origin", request.getHeader(HttpHeaders.ORIGIN));// origin 为请求接口的站点主域名
            response.addHeader("Access-Control-Allow-Credentials", "true");
            response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, HEAD");
            response.addHeader("Access-Control-Allow-Headers", "Content-Type");
            response.addHeader("Access-Control-Max-Age", "3600");
            return true;
        }

        User user = (User) request.getSession(false).getAttribute("USER_SESSION");
        System.out.println(user + "interceptor");
        if (user == null) {
            System.out.println("user == null ");
            return false;
        } else
            return true;
    }

    //在请求处理方法执行之后执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("---------------处理后---------------");
    }

    //在dispatcherServlet处理后执行,做清理工作
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("---------------清理---------------");
    }
}

过滤器重写示例:

// 由于我没有测试成功,在这里就不贴出代码了。

springMvc 实现跨域以及跨站

原文:https://www.cnblogs.com/lambertlt/p/14868601.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!