Springboot跨域註解詳解

一、Springboot跨域註解概述

隨着前端和後端分離越來越流行,跨域(Cross-Origin Resource Sharing,簡稱CORS)問題越來越普遍。當瀏覽器執行跨域請求時,會遵循同源策略來限制跨域請求。Springboot提供了很多解決跨域請求的方法,其中比較簡單和實用的就是使用跨域註解。本文將詳細介紹Springboot跨域註解及相關問題。

二、Springboot跨域註解使用方法

1、在需要允許跨域的Controller上使用@CrossOrigin註解。@CrossOrigin註解支持四個參數,分別是value、methods、allowedHeaders和maxAge。例如:

@RestController
@RequestMapping("/api")
public class UserController {
    
    @CrossOrigin(value = "*", maxAge = 1800, allowedHeaders = "*")
    @GetMapping("/users")
    public List getUserList() {
        //...
    }
}

2、在Springboot應用的配置文件中使用CorsFilter。例如:

@Bean
public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.addAllowedOrigin("*");
    config.addAllowedMethod("*");
    config.addAllowedHeader("*");
    config.setMaxAge(1800L);
    source.registerCorsConfiguration("/**", config);
    return new CorsFilter(source);
}

需要注意的是,使用CorsFilter需要添加依賴:spring-boot-starter-web、spring-boot-starter-tomcat、spring-boot-starter-validation。

三、Springboot跨域註解常見問題

1、Springboot跨域註解 vue無效

由於Vue的CORS請求默認會發送一個options的preflight請求,所以我們需要在服務端處理OPTIONS請求並添加相應的響應頭信息。例如:

@RestController
public class CorsController {
 
    @RequestMapping("/api/**")
    public void cors(HttpServletRequest request, HttpServletResponse response) {
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Max-Age", "3600");
    }
}

2、Springboot跨域註解無效

在某些情況下,部署Springboot應用時,可能會發現@CrossOrigin註解無效。這時,我們可以嘗試添加一個過濾器來處理跨域問題。例如:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
 
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Max-Age", "3600");
        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            chain.doFilter(req, res);
        }
    }
}

3、Springboot跨域註解指定IP

如果只允許特定的IP進行跨域請求,我們可以在@CrossOrigin註解中指定allowedOrigins參數。例如:

@RestController
@RequestMapping("/api")
public class UserController {
    
    @CrossOrigin(allowedOrigins = {"http://127.0.0.1:8080"})
    @GetMapping("/users")
    public List getUserList() {
        //...
    }
}

四、Springboot核心註解

除了@CrossOrigin註解外,Springboot還提供了很多核心註解,如@Controller、@RestController、@Autowired等。下面介紹三個比較常用的核心註解。

1、@Controller和@RequestMapping

@Controller註解用於標識一個類為Spring MVC的Controller,@RequestMapping則用於映射URL請求路徑。例如:

@Controller
@RequestMapping("/api")
public class UserController {
    
    @GetMapping("/users")
    public List getUserList() {
        //...
    }
}

2、@RestController和@GetMapping

@RestController註解不僅包含@Controller註解的功能,還可以自動添加@ResponseBody註解。@GetMapping則是@GetMapping註解的縮寫,用於處理HTTP GET請求。例如:

@RestController
@RequestMapping("/api")
public class UserController {
    
    @GetMapping("/users")
    public List getUserList() {
        //...
    }
}

3、@Autowired和@Service

@Autowired註解可以自動注入一個Bean,@Service註解則用於標識一個類為Spring的Service。例如:

@Service
public class UserServiceImpl implements UserService {
 
    @Autowired
    private UserRepository userRepository;
 
    @Override
    public List getUserList() {
        return userRepository.findAll();
    }
}

五、Springboot註解有哪些

除了上面介紹的註解外,Springboot還提供了很多其他的註解,如@Bean、@Configuration、@Component等。這些註解讓Springboot的配置和開發變得更加簡單和方便。

六、Springboot面試題及答案

1、什麼是Springboot?

答:Springboot是一種基於Spring框架的快速開發、便於部署的JavaWeb框架。

2、Springboot的特點有哪些?

答:Springboot的特點包括:快速開發、輕量級、依賴管理、自動配置、無XML配置、內嵌Servlet容器和獨立性。

3、如何使用Springboot處理跨域請求?

答:Springboot可以通過使用@CrossOrigin註解和CorsFilter來處理跨域請求。

4、Springboot中常用的註解有哪些?

答:Springboot中常用的註解包括:@Controller、@RestController、@Autowired、@Service、@Repository、@Bean、@Configuration、@Component等。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/219723.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-09 11:00
下一篇 2024-12-09 11:00

相關推薦

  • Hibernate註解聯合主鍵 如何使用

    解答:Hibernate的註解方式可以用來定義聯合主鍵,使用@Embeddable和@EmbeddedId註解。 一、@Embeddable和@EmbeddedId註解 在Hibe…

    編程 2025-04-29
  • 從ga角度解讀springboot

    springboot作為目前廣受歡迎的Java開發框架,其中的ga機制在整個開發過程中起着至關重要的作用。 一、ga是什麼 ga即Group Artifacts的縮寫,它是Mave…

    編程 2025-04-29
  • SpringBoot Get方式請求傳參用法介紹

    本文將從以下多個方面對SpringBoot Get方式請求傳參做詳細的闡述,包括URL傳參、路徑傳參、請求頭傳參、請求體傳參等,幫助讀者更加深入地了解Get請求方式下傳參的相關知識…

    編程 2025-04-27
  • SpringBoot如何設置不輸出Info日誌

    本篇文章將帶您了解如何在SpringBoot項目中關閉Info級別日誌輸出。 一、為什麼要關閉Info日誌 在開發中,我們經常會使用Log4j、Logback等框架來輸出日誌信息,…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分佈式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論