開発者日記:day 15
2021年07月26日月曜日晴れ
暑すぎて...エレベーターを待っている間に、汗で顔を洗ったようです.東南アジアもそんなに暑くない.
Today, I learned...
今日、Angular-springfoot 2 TOYプロジェクトはさらに発展しました.その過程で出てきた、今日は超えていないミスを紹介したいと思います.それぞれ地元でフロントとバックグラウンドを開発した人は、私と似たような状況を経験したことがあるかもしれません.これが「ソース間リソース共有」エラーです.
localhost:4200でフロントエンドのデバッガを実行し、localhost:8080で白人springブートを実行します.問題は、フロントがバックグラウンドに要求すると、上記のCORSポリシーに違反するため、バックグラウンドはフロントにデータを送信しません.私が試した方法は以下の通りです. Spring Bootで構成クラスを作成し、アプリケーション全体で4200ポートと通信できるようにする ばね起動RESTコントローラ4200ポートとの通信を可能にする で藁をつかむ気持ちで、フロントエンドの桜機でHTTPインターフェースを実現し、送信する頭に「Access Control-Allow-Origin」を追加(事実上、この頭はバックエンドサーバに追加すべきだったのですが、本当に何時間探しても見つからず、藁をつかむような感じ…)
検索結果に次のことがわかります.
1)CORSポリシーに違反しているか否かを判断するのはブラウザによるものである.(フロントまたはバックグラウンドでデータが正常に転送され、データがフロントに転送されたがブラウザのポリシーに違反した場合、これらのデータは破棄されます.つまり、ブラウザを介してサーバ間で通信しなければ、CORSなどを考慮する必要はありません.)
2)要求が発行されると、要求はすぐに発行されるのではなく、pre-flightという代替要求が発行され、それからこの要求が発行される(ブラウザがこの要求を発行する前に、OPTIONSヘッダを使用して小さな要求が送信され、要求の安全を確保する).
ブラウザの開発者ツールを開いてエラーが発生した場所を確認すると、localhost:8080/loginというurlが見つかりました.明らかにバックエンドコントローラに/loginと書いていませんが、なぜこれがあるのでしょうか.好奇心からブラウザにurlを入力すると、非常に簡単なログイン画面が表示されます.
推測1)spring securityを導入して作成した2)spring Bootでデフォルトで提供されているログインページ3)は、Googleのログインを実現するために作成されたものである(コンソールはユーザ情報と顧客情報のみを持ってきており、実際には実現していない部分をプロジェクトに明記している).
突然発生した/loginが混乱しているため、明日サーバーの応答ヘッダに「Access Control Allow-Origin」を追加したり、私の/loginページとURLを検索したりします.
おかげさまで、今日勉強したSpringTestとJUnitは、明日もう一度整理して、文章を書くつもりです.もう一つの目標は、2年以内にクラウド関連資格(AWS、Azure certificateなど)を取得することです.難易度はわかりませんが、AWSを基準にして、ほぼ合格しやすいと思います.目標は同僚や専門レベルの等級を追求することです.業務で2~3年働いてこそ達成できるレベルなので、挑戦してみたいと思います.
Tomorrow, I will...
明日私は.必ずCORS問題を解決しなければならない.そして今日勉強したSpringTestとJUnitを整理
暑すぎて...エレベーターを待っている間に、汗で顔を洗ったようです.東南アジアもそんなに暑くない.
Today, I learned...
今日、Angular-springfoot 2 TOYプロジェクトはさらに発展しました.その過程で出てきた、今日は超えていないミスを紹介したいと思います.それぞれ地元でフロントとバックグラウンドを開発した人は、私と似たような状況を経験したことがあるかもしれません.これが「ソース間リソース共有」エラーです.
localhost:4200でフロントエンドのデバッガを実行し、localhost:8080で白人springブートを実行します.問題は、フロントがバックグラウンドに要求すると、上記のCORSポリシーに違反するため、バックグラウンドはフロントにデータを送信しません.私が試した方法は以下の通りです.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://localhost:4200");
WebMvcConfigurer.super.addCorsMappings(registry);
}
}
@RestController
@RequestMapping("/api/v1/")
@CrossOrigin(origins = "http://localhost:4200")
public class UserController {
...
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (req) {
console.log('HTTP Interceptor');
console.log(JSON.stringify(req));
req = req.clone({
headers: req.headers.set('Access-Control-Allow-Origin', 'http://localhost:8080')
});
...
}
stackoverflow記事、ブログの位置づけ、海外サイトの整理記事を大量に読んだが、問題は解決できなかった.不思議なことに、数日前にコントローラに@CrossOriginを追加して問題を解決し、Spring Securityをスキップしました.つまり、xmlやGoogleへのログインに追加すると、CORSエラーが発生します.検索結果に次のことがわかります.
1)CORSポリシーに違反しているか否かを判断するのはブラウザによるものである.(フロントまたはバックグラウンドでデータが正常に転送され、データがフロントに転送されたがブラウザのポリシーに違反した場合、これらのデータは破棄されます.つまり、ブラウザを介してサーバ間で通信しなければ、CORSなどを考慮する必要はありません.)
2)要求が発行されると、要求はすぐに発行されるのではなく、pre-flightという代替要求が発行され、それからこの要求が発行される(ブラウザがこの要求を発行する前に、OPTIONSヘッダを使用して小さな要求が送信され、要求の安全を確保する).
ブラウザの開発者ツールを開いてエラーが発生した場所を確認すると、localhost:8080/loginというurlが見つかりました.明らかにバックエンドコントローラに/loginと書いていませんが、なぜこれがあるのでしょうか.好奇心からブラウザにurlを入力すると、非常に簡単なログイン画面が表示されます.
推測1)spring securityを導入して作成した2)spring Bootでデフォルトで提供されているログインページ3)は、Googleのログインを実現するために作成されたものである(コンソールはユーザ情報と顧客情報のみを持ってきており、実際には実現していない部分をプロジェクトに明記している).
突然発生した/loginが混乱しているため、明日サーバーの応答ヘッダに「Access Control Allow-Origin」を追加したり、私の/loginページとURLを検索したりします.
おかげさまで、今日勉強したSpringTestとJUnitは、明日もう一度整理して、文章を書くつもりです.もう一つの目標は、2年以内にクラウド関連資格(AWS、Azure certificateなど)を取得することです.難易度はわかりませんが、AWSを基準にして、ほぼ合格しやすいと思います.目標は同僚や専門レベルの等級を追求することです.業務で2~3年働いてこそ達成できるレベルなので、挑戦してみたいと思います.
Tomorrow, I will...
明日私は.必ずCORS問題を解決しなければならない.そして今日勉強したSpringTestとJUnitを整理
Reference
この問題について(開発者日記:day 15), 我々は、より多くの情報をここで見つけました https://velog.io/@strawberry/개발자-일기-day-15テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol