java解決請求跨域問題,有以下幾種方法


1.使用攔截器,實現javax.servlet.Filter接口
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
 
@WebFilter (filterName= "CorsFilter" , urlPatterns= "*.do" )
public class CorsFilter implements Filter{
 
  @Override
  public void destroy() {
  }
 
  @Override
  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
  throws IOException, ServletException {
  HttpServletResponse response = (HttpServletResponse) resp;
  response.setHeader( "Access-Control-Allow-Origin" , "*" ); //解決跨域訪問報錯
   response.setHeader( "Access-Control-Allow-Methods" , "POST, PUT, GET, OPTIONS, DELETE" );
   response.setHeader( "Access-Control-Max-Age" , "3600" ); //設置過期時間
   response.setHeader( "Access-Control-Allow-Headers" , "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization" );
   response.setHeader( "Cache-Control" , "no-cache, no-store, must-revalidate" ); // 支持HTTP 1.1.
   response.setHeader( "Pragma" , "no-cache" ); // 支持HTTP 1.0. response.setHeader("Expires", "0");
   chain.doFilter(req, resp);
  
  }
 
  @Override
  public void init(FilterConfig arg0) throws ServletException {
  }
}
如果想用xml的形式配置攔截器,可以刪除@WebFilter(filterName="CorsFilter" , urlPatterns="*.do"),然后在web.xml中添加下面的配置
< filter >
  < filter-name >CorsFilter</ filter-name >
  < filter-class >com.huaming.filter.CorsFilter</ filter-class >
</ filter >
< filter-mapping >
  < filter-name >CorsFilter</ filter-name >
  < url-pattern >*.do</ url-pattern >
</ filter-mapping >
 
2.使用注解的形式,配置org.springframework.web.filter.CorsFilter,通常springboot項目多數使用這種方式
 
import org.springframework.web.filter.CorsFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
 
/**
  * 解決跨域問題springboot所需配置
  */
@Configuration
public class CORSConfiguration {
  
  @Bean
  public CorsFilter corsFilter() {
  //1.添加CORS配置信息
  CorsConfiguration config = new CorsConfiguration();
  //1) 允許的域,不要寫*,否則cookie就無法使用了
  config.addAllowedOrigin( "*" );
  config.addAllowedHeader( "*" ); // 允許任何頭
  config.addAllowedMethod( "*" ); // 允許任何方法(post、get等)
  //2) 是否發送Cookie信息
  config.setAllowCredentials( true );
  //3) 允許的請求方式
  config.addAllowedMethod( "OPTIONS" );
  config.addAllowedMethod( "HEAD" );
  config.addAllowedMethod( "GET" );
  config.addAllowedMethod( "PUT" );
  config.addAllowedMethod( "POST" );
  config.addAllowedMethod( "DELETE" );
  config.addAllowedMethod( "PATCH" );
  // 4)允許的頭信息
  config.addAllowedHeader( "*" );
 
  // 5)配置有效時長
  config.setMaxAge( 3600 *24L);
 
  //2.添加映射路徑,我們攔截一切請求
  UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
  configSource.registerCorsConfiguration( "/**" , config);
 
  //3.返回新的CorsFilter.
  return new CorsFilter(configSource);
  }
}
 
 
另外參考其他的解決方法
https://blog.csdn.net/yue29026/article/details/70860719/
https://blog.csdn.net/sky786905664/article/details/79183856(符合我項目的情況,已使用)
https://cloud.tencent.com/developer/article/1450192


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM