日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Spring Boot中CORS問題及解決辦法,源碼解析

來源: 責(zé)編: 時(shí)間:2023-11-03 09:17:19 347觀看
導(dǎo)讀CORS(跨源資源共享)是一種Web標(biāo)準(zhǔn),允許來自不同源的Web頁(yè)面共享資源。在Spring Boot應(yīng)用程序中,CORS問題可能會(huì)出現(xiàn),因?yàn)闉g覽器會(huì)阻止來自不同源的請(qǐng)求。默認(rèn)情況下,Spring Boot允許來自同一源的請(qǐng)求,但會(huì)阻止來自不同源的請(qǐng)

lZP28資訊網(wǎng)——每日最新資訊28at.com

CORS(跨源資源共享)是一種Web標(biāo)準(zhǔn),允許來自不同源的Web頁(yè)面共享資源。在Spring Boot應(yīng)用程序中,CORS問題可能會(huì)出現(xiàn),因?yàn)闉g覽器會(huì)阻止來自不同源的請(qǐng)求。默認(rèn)情況下,Spring Boot允許來自同一源的請(qǐng)求,但會(huì)阻止來自不同源的請(qǐng)求。lZP28資訊網(wǎng)——每日最新資訊28at.com

要解決CORS問題,您可以使用Spring Boot提供的CORS支持。以下是一些可能的解決方案:lZP28資訊網(wǎng)——每日最新資訊28at.com

使用全局CORS配置

您可以在Spring Boot應(yīng)用程序的主類上添加@CrossOrigin注解,以允許來自所有源的請(qǐng)求。例如:lZP28資訊網(wǎng)——每日最新資訊28at.com

@SpringBootApplicationpublic class MyApplication {    public static void main(String[] args) {        SpringApplication.run(MyApplication.class, args);    }    @Bean    public WebMvcConfigurer corsConfigurer() {        return new WebMvcConfigurer() {            @Override            public void addCorsMappings(CorsRegistry registry) {                registry.addMapping("/**")                        .allowedOrigins("*")                        .allowedMethods("*")                        .allowedHeaders("*");            }        };    }}

在上面的示例中,我們創(chuàng)建了一個(gè)WebMvcConfigurer bean,并覆蓋了addCorsMappings方法。我們使用CorsRegistry對(duì)象來定義CORS規(guī)則。在這個(gè)例子中,我們?cè)试S來自所有源的請(qǐng)求,并允許所有方法和頭部。lZP28資訊網(wǎng)——每日最新資訊28at.com

使用局部CORS配置

如果您只想為特定的控制器或請(qǐng)求方法啟用CORS,您可以在控制器類或請(qǐng)求方法上添加@CrossOrigin注解。例如:lZP28資訊網(wǎng)——每日最新資訊28at.com

@RestController@RequestMapping("/api")public class MyController {    @CrossOrigin(origins = "*", methods = "*", headers = "*")    @GetMapping("/data")    public ResponseEntity<String> getData() {        // ...    }}

在上面的示例中,我們只在getData方法上啟用了CORS。我們?cè)试S來自所有源的請(qǐng)求,并允許所有方法和頭部。lZP28資訊網(wǎng)——每日最新資訊28at.com

使用自定義CORS配置

如果您需要更細(xì)粒度的CORS配置,您可以創(chuàng)建自定義的CorsConfiguration對(duì)象,并將其添加到CorsRegistry對(duì)象中。例如:lZP28資訊網(wǎng)——每日最新資訊28at.com

@Beanpublic WebMvcConfigurer corsConfigurer() {    return new WebMvcConfigurer() {        @Override        public void addCorsMappings(CorsRegistry registry) {            CorsConfiguration config = new CorsConfiguration();            config.setAllowedOrigins(Arrays.asList("http://example.com", "https://example.org"));            config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));            config.setAllowedHeaders(Arrays.asList("X-Requested-With", "Content-Type", "Authorization"));            config.setAllowCredentials(true);            registry.addMapping("/**").withConfig(config);        }    };}

在上面的示例中,我們創(chuàng)建了一個(gè)自定義的CorsConfiguration對(duì)象,并設(shè)置了允許的源、方法、頭部和憑證。然后,我們將該配置添加到CorsRegistry對(duì)象中,以應(yīng)用于所有的請(qǐng)求路徑。
除了上述方法,還有一些其他的解決方案可以用來解決Spring Boot中的CORS問題。例如:
lZP28資訊網(wǎng)——每日最新資訊28at.com

使用Spring Security的CORS支持

如果您正在使用Spring Security,您可以使用其提供的CORS支持來解決CORS問題。以下是一個(gè)示例配置:lZP28資訊網(wǎng)——每日最新資訊28at.com

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.cors().and(). ...    }    @Bean    public CorsConfigurationSource corsConfigurationSource() {        CorsConfiguration configuration = new CorsConfiguration();        configuration.setAllowedOrigins(Arrays.asList("http://example.com", "https://example.org"));        configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));        configuration.setAllowedHeaders(Arrays.asList("X-Requested-With", "Content-Type", "Authorization"));        configuration.setAllowCredentials(true);        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();        source.registerCorsConfiguration("/**", configuration);        return source;    }}

在上面的示例中,我們創(chuàng)建了一個(gè)CorsConfigurationSource bean,并設(shè)置了允許的源、方法、頭部和憑證。然后,我們?cè)贖ttpSecurity對(duì)象上調(diào)用cors()方法來啟用CORS支持,并將CorsConfigurationSource對(duì)象傳遞給該方法。lZP28資訊網(wǎng)——每日最新資訊28at.com

使用過濾器解決CORS問題

您還可以創(chuàng)建一個(gè)自定義的過濾器來解決CORS問題。以下是一個(gè)示例配置:lZP28資訊網(wǎng)——每日最新資訊28at.com

@Componentpublic class CorsFilter extends OncePerRequestFilter {    @Override    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {        CorsConfiguration config = new CorsConfiguration();        config.setAllowedOrigins(Arrays.asList("http://example.com", "https://example.org"));        config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));        config.setAllowedHeaders(Arrays.asList("X-Requested-With", "Content-Type", "Authorization"));        config.setAllowCredentials(true);        CorsConfigurationSource source = new UrlBasedCorsConfigurationSource();        source.registerCorsConfiguration("/**", config);        CorsFilter corsFilter = new CorsFilter(source);        corsFilter.doFilter(request, response, filterChain);    }}

在上面的示例中,我們創(chuàng)建了一個(gè)自定義的CorsFilter類,并覆蓋了doFilterInternal方法。在這個(gè)方法中,我們創(chuàng)建了一個(gè)CorsConfiguration對(duì)象,并設(shè)置了允許的源、方法、頭部和憑證。然后,我們創(chuàng)建了一個(gè)UrlBasedCorsConfigurationSource對(duì)象,并將CorsConfiguration對(duì)象注冊(cè)到該對(duì)象中。最后,我們創(chuàng)建了一個(gè)CorsFilter對(duì)象,并將其應(yīng)用到請(qǐng)求/響應(yīng)鏈中。lZP28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-16753-0.htmlSpring Boot中CORS問題及解決辦法,源碼解析

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 用積分神經(jīng)網(wǎng)絡(luò)在一分鐘內(nèi)轉(zhuǎn)換DNN

下一篇: 程序員福音——CodeGeeX智能編程助手

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 安龙县| 锡林郭勒盟| 沅陵县| 汤阴县| 双柏县| 资源县| 云龙县| 辉县市| 本溪| 长沙市| 勃利县| 蓝田县| 诸暨市| 景东| 永春县| 宝鸡市| 南木林县| 屯留县| 乌拉特前旗| 景东| 鄯善县| 顺平县| 武乡县| 成安县| 深州市| 剑川县| 邓州市| 枝江市| 剑河县| 新余市| 奉化市| 肃北| 永顺县| 宁夏| 林芝县| 福建省| 平遥县| 临海市| 江门市| 汾西县| 富阳市|