电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot+Spring Security無法實現(xiàn)跨域的解決方案

瀏覽:82日期:2023-02-24 14:51:17
SpringBoot+Spring Security無法實現(xiàn)跨域未使用Security時跨域:

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.autoconfigure.AutoConfigureBefore;import org.springframework.context.annotation.Configuration;import org.springframework.format.FormatterRegistry;import org.springframework.web.servlet.config.annotation.*;@Configuration@AutoConfigureBefore(SecurityConfig.class)public class MyMvcConfigurer implements WebMvcConfigurer { public void addCorsMappings(CorsRegistry registry){LOGGER.info('跨域已設(shè)置');registry.addMapping('/**').allowedOrigins('*').allowedMethods('*').allowedHeaders('*').allowCredentials(true).maxAge(3600); }}

整合Security時發(fā)現(xiàn)只用上述方法前后端分離時仍存在跨域問題,

解決方法如下:

@Configuration@AutoConfigureBefore(Swagger2Configuration.class)@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)@Order(-1)public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception {http.formLogin().loginProcessingUrl('/user/login').loginPage('/singIn.html').successHandler(moyuAuthenticationSuccessHandler).failureHandler(moyuAuthenticationFailureHandler).and().apply(moyuSocialSecurityConfig).and().rememberMe().tokenRepository(persistentTokenRepository()).tokenValiditySeconds(3600*24*7).userDetailsService(userDetailsService).and().authorizeRequests().antMatchers('/user/login','/login','/singIn.html','**','/**').permitAll().anyRequest().authenticated().and().cors().and().csrf().disable(); }}重點加入代碼:

.and() .cors()//新加入 .and() .csrf().disable();引用Spring Security 項目的跨域處理

最近項目采用了前后端分離的框架,前端和后臺接口沒有部署到一個站點,出現(xiàn)了跨域問題,什么是跨域,這里就不再贅述,直接說解決辦法。

Spring 解決跨域的方式有很多,個人采用了Crosfilter的方式

具體代碼如下:

@Bean public CorsFilter corsFilter() {final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();final CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.setAllowCredentials(true);corsConfiguration.addAllowedOrigin('*');corsConfiguration.addAllowedHeader('*');corsConfiguration.addAllowedMethod('*');urlBasedCorsConfigurationSource.registerCorsConfiguration('/**', corsConfiguration);return new CorsFilter(urlBasedCorsConfigurationSource); }

配置完成后,測試調(diào)用,報錯401,依然不行。網(wǎng)上查資料得知,跨域請求會進行兩次。具體流程見下圖:

SpringBoot+Spring Security無法實現(xiàn)跨域的解決方案

每次跨域請求,真正請求到達(dá)后端之前,瀏覽器都會先發(fā)起一個preflight request,請求方式為OPTIONS 詢問服務(wù)端是否接受該跨域請求,具體參數(shù)如下圖:

SpringBoot+Spring Security無法實現(xiàn)跨域的解決方案

但是該請求不能攜帶cookie和自己定義的header。

由于項目中引入了Spring security ,而我使用的token傳遞方式是在header中使用authorization 字段,這樣依賴Spring Security攔截到 preflight request 發(fā)現(xiàn)它沒有攜帶token,就會報錯401,沒有授權(quán)。

解決這個問題很簡單,可以使用以下配置

讓Spring security 不校驗preflight request 。

@Override public void configure(HttpSecurity http) throws Exception {ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = http.authorizeRequests();registry.requestMatchers(CorsUtils::isPreFlightRequest).permitAll();//讓Spring security放行所有preflight request }

再試就搞定了,但是后端直接配置支持跨域會導(dǎo)致兩次請求。還使用另一種方式,使用Nginx 轉(zhuǎn)發(fā)一下請求也可以。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 建筑资质代办_工程施工资质办理_资质代办公司_北京众聚企服 | 压力变送器-上海武锐自动化设备有限公司 | 冷却塔厂家_冷却塔维修_冷却塔改造_凉水塔配件填料公司- 广东康明节能空调有限公司 | 上海佳武自动化科技有限公司| 小港信息港-鹤壁信息港 鹤壁老百姓便民生活信息网站 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | 蜂蜜瓶-玻璃瓶-玻璃瓶厂-玻璃瓶生产厂家-徐州贵邦玻璃制品有限公司 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 浙江富广阀门有限公司 | 实验室pH计|电导率仪|溶解氧测定仪|离子浓度计|多参数水质分析仪|pH电极-上海般特仪器有限公司 | 厂厂乐-汇聚海量采购信息的B2B微营销平台-厂厂乐官网 | 注浆压力变送器-高温熔体传感器-矿用压力传感器|ZHYQ朝辉 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 纳米涂料品牌 防雾抗污纳米陶瓷涂料厂家_虹瓷科技 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 洗石机-移动滚筒式,振动,螺旋,洗矿机-青州冠诚重工机械有限公司 | 软瓷_柔性面砖_软瓷砖_柔性石材_MCM软瓷厂家_湖北博悦佳软瓷 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | VI设计-LOGO设计公司-品牌设计公司-包装设计公司-导视设计-杭州易象设计 | 光泽度计_测量显微镜_苏州压力仪_苏州扭力板手维修-苏州日升精密仪器有限公司 | 发电机组|柴油发电机组-批发,上柴,玉柴,潍柴,康明斯柴油发电机厂家直销 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 防火卷帘门价格-聊城一维工贸特级防火卷帘门厂家▲ |