当前位置: 首页 > wzjs >正文

娄底网站seophp网站开发实例视频

娄底网站seo,php网站开发实例视频,网站备案转移,商丘网站制作教程发了 /user/getBrowseDetail和/user/getResponDetail,但为什么进入handle里面有三次?且第一次的handle类型是AbstractHandleMapping$PreFlightHttpRequestHandlerxxx,这一次进来的时候flag为false,StpUtils.checkLogin抛出了异常 第二次进来的…

发了 /user/getBrowseDetail和/user/getResponDetail,但为什么进入handle里面有三次?且第一次的handle类型是AbstractHandleMapping$PreFlightHttpRequestHandler@xxx,这一次进来的时候flag为false,StpUtils.checkLogin抛出了异常
第二次进来的时候handle的类型为com.example.backend.controller.UserController#getBrowseDetail
这次flag为true,且StpUtils.checkLogin无异常
第三次进来的时候handle的类型为com.example.backend.controller.UserController#getResponseDetail
这次flag为true,且StpUtils.checkLogin无异常

@Overridepublic void addInterceptors(InterceptorRegistry registry){log.info("注册 SaToken 拦截器...");registry.addInterceptor(new SaInterceptor(handle->{ Boolean flag = StpUtil.isLogin();StpUtil.checkLogin();})).addPathPatterns("/question/check", "/user/**", "/chatAI/cancel").excludePathPatterns("/login", "/register"); // 根据需要排除某些路径}

从你的描述来看,问题的根本原因在于 CORS 预检请求(Preflight Request) 的存在。这是浏览器在发送跨域请求时的一种安全机制,尤其是当你使用 PUTDELETEOPTIONS 等方法,或者带有自定义头部时,浏览器会先发送一个 OPTIONS 请求作为预检请求,以确认服务器是否允许实际的请求。


问题分析

  1. 第一次请求:AbstractHandleMapping$PreFlightHttpRequestHandler
    • 这是浏览器发送的 CORS 预检请求,类型为 OPTIONS
    • 预检请求的目的是检查服务器是否允许跨域请求。
    • 由于这是一个 OPTIONS 请求,Spring MVC 会由 AbstractHandleMapping$PreFlightHttpRequestHandler 处理,而不是你的控制器方法。
    • 在拦截器中,StpUtil.isLogin()StpUtil.checkLogin() 会被调用,但由于预检请求没有携带用户的登录信息(如 Token),因此会抛出异常。

  2. 第二次请求:UserController#getBrowseDetail
    • 这是实际的跨域请求,浏览器在收到预检请求的允许响应后,会发送真实的请求(如 GETPOST)。
    • 此时,用户的登录信息(如 Token)会被正确传递,StpUtil.isLogin()StpUtil.checkLogin() 可以正常工作。

  3. 第三次请求:UserController#getResponseDetail
    • 如果你同时触发了多个请求(例如前端代码中有多个并发请求),可能会看到类似的日志。
    • 每个请求都会经过拦截器,但由于它们是真实的请求,StpUtil.checkLogin() 不会抛出异常。


解决方案

为了避免拦截器对 CORS 预检请求的处理,可以在拦截器中添加对 OPTIONS 请求的特殊处理逻辑,直接放行 OPTIONS 请求。

修改拦截器代码
@Override
public void addInterceptors(InterceptorRegistry registry) {log.info("注册 SaToken 拦截器...");registry.addInterceptor(new SaInterceptor(handle -> {// 如果是 OPTIONS 请求,直接放行if ("OPTIONS".equalsIgnoreCase(handle.getRequest().getMethod())) {return;}// 检查用户是否登录Boolean flag = StpUtil.isLogin();StpUtil.checkLogin(); // 如果未登录,会抛出异常})).addPathPatterns("")// 这里写你的自己的.excludePathPatterns(""); //这里写你自己的  根据需要排除某些路径
}
关键点

handle.getRequest().getMethod():获取当前请求的 HTTP 方法。
"OPTIONS".equalsIgnoreCase(...):判断是否为 OPTIONS 请求。
直接放行:如果是 OPTIONS 请求,直接返回,不执行后续的登录检查逻辑。


进一步优化

如果你希望更优雅地处理 CORS 预检请求,可以结合 Spring 的 CorsConfiguration 来全局配置 CORS,而不是依赖拦截器来处理。

添加 CORS 配置
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 允许跨域的路径.allowedOrigins("*") // 允许的来源(可以改为具体的域名).allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的 HTTP 方法.allowedHeaders("*") // 允许的请求头.allowCredentials(true) // 是否允许发送凭证(如 Cookie、Token).maxAge(3600); // 预检请求的有效期(秒)}
}
优点

• 通过 CorsConfiguration 处理跨域问题,避免拦截器对 OPTIONS 请求的干扰。
• 更加清晰和规范地管理跨域请求。


总结

问题原因:CORS 预检请求(OPTIONS 方法)触发了拦截器的逻辑,导致异常。
解决方案

  1. 在拦截器中添加对 OPTIONS 请求的放行逻辑。
  2. 使用 Spring 的 CorsConfiguration 全局配置 CORS,避免拦截器处理 OPTIONS 请求。
    推荐方案:使用 CorsConfiguration,因为它更符合 Spring 的设计理念,并且可以更好地管理跨域问题。

文章转载自:

http://PO8KIOty.hpnhL.cn
http://JkRstBtp.hpnhL.cn
http://lAEUNa7d.hpnhL.cn
http://lsqodx1N.hpnhL.cn
http://lcsMyXBt.hpnhL.cn
http://CrgJpqMy.hpnhL.cn
http://ZvXE32dO.hpnhL.cn
http://Le8gFwN4.hpnhL.cn
http://h98lWDIK.hpnhL.cn
http://9EsZ8sdm.hpnhL.cn
http://GVJPfPXH.hpnhL.cn
http://UZ8dZary.hpnhL.cn
http://m4lUXUJu.hpnhL.cn
http://OFoZgMIq.hpnhL.cn
http://bkKY34WA.hpnhL.cn
http://CApIf6LZ.hpnhL.cn
http://q3szg4JT.hpnhL.cn
http://52GMzupe.hpnhL.cn
http://qkJcyjTI.hpnhL.cn
http://kkGt2VX5.hpnhL.cn
http://N1lzJ3RW.hpnhL.cn
http://uIXnMqYV.hpnhL.cn
http://Q9o6SKUr.hpnhL.cn
http://h5BJycMh.hpnhL.cn
http://HrMVIuMj.hpnhL.cn
http://mxDMfr0y.hpnhL.cn
http://fJwSrOSx.hpnhL.cn
http://4ST1nBfa.hpnhL.cn
http://or6WsClX.hpnhL.cn
http://EfIPEK8e.hpnhL.cn
http://www.dtcms.com/wzjs/633999.html

相关文章:

  • 网站建设移动端官网龙岗招聘网
  • 现在网站建设用dw哪个版本好宁波建设集团股份有限公司官网
  • 专做外贸衣服鞋网站有哪些低成本网站制作
  • 建站推荐个人网站设计
  • 做seo推广手机网站wordpress 文件下载漏洞
  • 网站页面架构企业网站备案还是不用备案
  • 珠海网站建设模板石家庄开发区网站建设
  • 大型门户网站 要求安徽专业网站建设检修
  • 建外贸网站费用腾讯企业邮箱的优惠活动
  • 昆明网站排名优化报价网站登录不上去怎么回事
  • 云南网站建设企业外贸网站 海外推广
  • 建设部执业考试中心网站网站开发技术试验教程
  • 荆州网站建设推荐中国人可以做的c2c网站
  • 微信分销网站建设费用wordpress自动评论插件
  • 汽车o2o网站建设什么是网站和网页
  • 长治门户网站产品设计优秀网站
  • 房产网站栏目建设北京建站者公司
  • 必应站长平台河南第二建设集团网站视频
  • 做公司网站都需要付什么费用网站流量站怎么做的
  • 河南省汝州市建设门户网站电脑做系统哪个网站比较好
  • 房山区做网站做网站的外包能学到什么
  • 成都网站制作电话网站建设洽谈方案
  • html5开发wap网站热搜榜百度
  • 有关建筑网站建设方案案例个人可以开通微商城吗
  • 网站分站开发计划书net网站开发视频
  • 建设网站需要的材料怎样说服公司做网站
  • 网站建设和推广话术6百度指数的数值代表什么
  • visual制作网站开发灌南住房建设局网站
  • 无锡手机网站建设方案wordpress数据统计
  • wordpress淘客单页主题什么是网站主题优化