Java跨域问题

这篇具有很好参考价值的文章主要介绍了Java跨域问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

跨域是指跨域名的访问,以下情况都属于跨域:

跨域原因说明

示例

域名不同

www.output.com与www.chengguoku.com

域名相同,端口不同

www.output.com:8324与www.output.com:8080

二级域名不同

bjfu.output.com与example.output.com

注意:如果域名和端口相同,但是请求路径不同,不属于跨域,如:

http://www.output.com/user

www.output.com/test

(1)为什么会有跨域问题

跨域是指a页面想获取b页面资源,如果a,b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是说不允许跨域请求资源。

跨域问题的根本原因:因为浏览器收到同源策略的限制,当前域名的js只能读取同域名下的窗口属性。什么叫做同源策略?就是不同的域名,不同端口,不同协议不允许共享资源的,保障浏览器安全。同源策略是针对浏览器设置的门槛。

只有访问类型为XMLHttpRequest的才会出现跨域。

(2)解决方案

  1. 手写过滤器实现,通过过滤器开放需要访问的接口。首先,如何设置一个过滤器:

如何创建一个过滤器:SpringBoot之HandlerInterceptor拦截器的使用详解

1.1自定义拦截器

定义一个类实现org.springframework.web.servlet.HandlerInterceptor接口。

1.2添加Interceptor拦截器到WebMvcConfigurer配置器中

直接实现org.springframework.web.servlet.config.annotation.WebMvcConfigurer接口。

@Configuration
public class WebAppConfigurer implements WebMvcConfigurer {
}

1.3HandlerInterceptor方法介绍

preHandle:预处理,在业务处理器处理请求之前被调用,可以进行登录拦截,编码处理、安全控制、权限校验等处理;

default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    return true;
}

postHandle:后处理,在业务处理器处理请求执行完成后,生成视图之前被调用。即调用了Service并返回ModelAndView,但未进行页面渲染,可以修改ModelAndView。

default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            @Nullable ModelAndView modelAndView) throws Exception {
}

afterCompletion:返回处理,在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。已经渲染了页面。

default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
            @Nullable Exception ex) throws Exception {
}

2.Spring boot 拦截器跨域解决

拦截器类

public class CorsInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //表示接受任意域名的请求,也可以指定域名
        response.setHeader("Access-Control-Allow-Origin",request.getHeader("origin"));
        //该字段可选,是个布尔值,表示是否可以携带cookie
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT,PATCH, DELETE, OPTIONS");
        response.setHeader("Access-Control-Allow-Headers", "*");
        if (HttpMethod.OPTIONS.toString().equals(request.getMethod())){
            return  true;
        }
        return true;
    }
}

在配置类中添加配置文章来源地址https://www.toymoban.com/news/detail-488270.html

@Autowired
private CorsInterceptor corsInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(corsInterceptor()).addPathPatterns("/**");
}

到了这里,关于Java跨域问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Gateway解决跨域问题时配置文件不生效的情况之一

    首先html文件只有一个发送ajax请求 而gateway的配置文件如下 使用VSCode打开html页面时,发送ajax请求后浏览器控制台打印结果如下   显而易见,html发送的请求没有与gateway设置的允许跨域的url地址匹配上,而将配置文件中的localhost修改为127.0.0.1时,再次访问就可以成功响应。 如

    2024年02月06日
    浏览(40)
  • java实现判断域名无法访问的时候自行访问下一条域名

    我们首先定义了一组需要检查的域名。然后,我们使用一个 for 循环依次访问每个域名。在每次循环中,我们首先使用 InetAddress 类尝试通过 DNS 解析获取该域名的 IP 地址。如果能够成功获取到 IP 地址,则尝试使用 isReachable 方法判断该地址是否可以访问。如果能够在指定的时

    2024年02月16日
    浏览(37)
  • 微信小程序合法域名校验出错:不在以下合法域名列表中

    微信开发者工具报错或真机没有数据,合法域名校验出错:不在以下合法域名列表中,请参考文档 一、如果只是想让微信开发者工具不报错,勾选该选项即可  二、如果需要真机使用,上线,微信公众平台还没有配置这些域名,需要去配置 往下滑 再这里把用到的接口都配置

    2024年02月12日
    浏览(46)
  • SpringBoot解决跨域访问的问题

    说到跨域访问,必须先解释一个名词:同源策略。所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同、Host(ip)相同、端口相同的条件,否则访问将被禁止,该访问也就被称为跨域访问。 虽然跨域访问被禁止之后,可以在一定程度上提高了应用

    2024年02月09日
    浏览(39)
  • java项目域名访问失败但IP访问正常

    发生此类型情况可能的原因如下: DNS 解析问题:域名访问失败可能是因为 DNS 解析出现了问题,导致域名无法解析成正确的 IP 地址。可以通过使用 nslookup 或 dig 命令来检查 DNS 解析是否正常。 域名解析错误:在某些情况下,域名解析错误可能会导致域名访问失败。例如,如

    2024年02月11日
    浏览(40)
  • 我会在以下情况用到GPT

    ChatGPT可以在各种情况下派上用场,包括但不限于以下情况: 获取信息 :你可以使用ChatGPT来获取关于各种主题的信息,例如历史事件、科学知识、文化背景等。ChatGPT可以用作一个知识库,回答你的问题。 学习新知识 :如果你有疑问,想要深入了解某个主题,可以向ChatGPT提

    2024年02月07日
    浏览(36)
  • php跨域和https访问http问题分析

    1、https的web访问http地址的资源 问题:请求状态status= (canceled)    解决办法:把资源地址改成https的 2、https的web访问http地址的资源 问题:请求状态status= (blocked:mixed-content) mixed-contend解释 是:出现这个问题的原因是因为 在https网站中发起的http请求被禁止。也就是在https的网站

    2024年04月25日
    浏览(39)
  • MacOS访问某局域网域名存在问题,但是ip可以正常访问的问题解决方案

    背景: 公司服务器部署wiki,之前macos访问wiki服务都是通过ip:8090形式访问,后来给wiki服务配置了域名wiki:8090,后macos浏览器连接同样的网络却一直没办法正常域名访问wiki,但可以ip访问wiki,但是其他同事们都可以正常访问。 解决方案: 1. 首先排查本地域名解析是否正确 ns

    2024年01月17日
    浏览(100)
  • vue解决跨域访问问题(个人学习笔记六)

    先看文章目录,大致了解知识点结构,直接点击文章目录可以跳转到文章指定位置。 vue单页应用项目开发时,避免不了要请求后端,这时通常就会出现跨域问题 浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都会导致跨域问题。即前端接

    2024年02月15日
    浏览(45)
  • springcloud:解决阿里云OSS文件访问跨域问题

    最近在高德地图中引用阿里云OSS存储的图片时,出现跨域访问问题,特此记录,以方便后续同学参考 1、在阿里云OSS后台管理中,进入权限管理,进入跨域设置,添加跨域规则,设置来源为 * 图片来源于https://blog.csdn.net/strugglerookie/article/details/119417281 2、至此配置完成后访问图

    2024年02月01日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包