1. プロジェクト全体へのクロスドメイン アクセスを許可し、フィルターでフィルター処理し、フォルダーの下に Web フィルターという名前の Java クラスを作成します。
ファイルの場所とファイル名: \src\main\java\pm.lms\WebConfig\SimpleCORSFilter.java これら 2 つのファイルは、src\main\java の下の任意のサブフォルダーに配置でき、注釈を使用して自分で定義できることに注意してください。こうすることで、システムは @Configuration を含むファイルを見つけて、構成ファイル web.xml に登録します。web.xml ファイルを手動で操作する必要はありませんが、プロジェクトが springBoot フレームワークではない場合は、本来の方法で web.xml に手動で登録する必要があります。
public class SimpleCORSFilter implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
次の構成を web.xml に追加する必要があります
1) 最初の方法: web.xml を手動で設定します
<filter>
<filter-name>cors</filter-name>
<filter-class>com.ssm.web.filter.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</filter>
2) 2 番目の方法: springBoot アノテーションの方法。Java クラスを使用して web.xml ファイルを直接操作します。注意: springBoot は web.xml の手動構成を使用しません。
ファイルの場所とファイル名: \src\main\java\pm.lms\WebConfig\WebConfig.java
package pm.lms.WebConfig;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean<SimpleCORSFilter> filterRegistrationBean() {
FilterRegistrationBean<SimpleCORSFilter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new SimpleCORSFilter());
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
2. 単一メソッドにクロスドメイン アクセスを提供するには、リクエスト ヘッダーを直接追加します。
response.setHeader("アクセス制御の許可オリジン", "*");
response.setHeader("アクセス制御の許可メソッド", "POST、GET、OPTIONS、DELETE");
response.setHeader("アクセス-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
クロスドメインの問題を解決するためのバックエンド (springboot)
まず、次のことを行う必要があります。クロスドメインとは何か:
クロスドメインとは、異なるドメイン名間の相互アクセスを指します。クロスドメインとは、ブラウザーが他の Web サイトからのスクリプトを実行できないことを意味します。これは、ブラウザの同一生成元ポリシー、つまりブラウザによって JavaScript に課されるセキュリティ制限によって発生します。
つまり、Web サイト A で Ajax を使用して Web サイト B の特定のコンテンツを取得したい場合、
Web サイト A と Web サイト B が同じドメインにない場合、クロスドメイン アクセスの問題が発生します。
同一ドメインとは何ですか?
同じプロトコル、同じ IP、同じポート、および 3 つのうちの 1 つの違いにより、クロスドメインが発生します。
クロスドメインに対するフロントエンド ソリューション:
前述したように、クロスドメインとは、ブラウザーが他の Web サイトからスクリプトを実行できないことを意味します。これは、ブラウザの同一生成元ポリシー、つまりブラウザによって JavaScript に課されるセキュリティ制限によって発生します。
解決策:
そこで、ノード サーバーをプロキシとして設定し、リクエストをノード サーバーに送信すると、ノード サーバーはそれをバックエンドに転送して、クロスドメインの問題を回避します。
バックエンドはクロスドメインの問題を解決します。
バックエンドの解決策は比較的シンプルです。たとえば、私が使用する Springboot では、現在のコントローラーへのクロスドメイン アクセスを実現するために、Controller クラスに「@CrossOrigin」アノテーションを追加するだけで済みます。もちろん、このラベルをメソッドに追加することもできます。
@RequestMapping(value = "/users")
@RestController
@CrossOrigin
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(method = RequestMethod.POST)
@CrossOrigin
public User create(@RequestBody @Validated User user) {
return userService.create(user);
}
}
学習コレクション
を転載: https://blog.csdn.net/weixin_41796956/article/details/84133901?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu% 7ERate-1 -84133901-blog-128429843.235%5Ev38%5Epc_relevant_sort& Depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommmendFromBaidu%7ERate-1-84133901-blog-128429 843.235%5E v38%5Epc_relevant_sort&utm_relevant_index=2