フロントエンド-「vueがバックグラウンドインターフェイスにアクセスするときにいくつかのピット

これが状況です。

バックエンドのspringbootインターフェースは、shiro権限で管理されます。パスワードを覚えておき、ログインしてから24時間以内に自動的にログインしたい。Shiroは、rememberMeのremember password managerを提供して、自動ログインの実現を支援します。

最初に最初のピットについて話させてください。クロスドメイン、これは言うまでもありません。これは特別なピットではありません。以下の構成に従ってください。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CustomCORSConfiguration {
    private CorsConfiguration buildConfig(){
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedHeader("*"); // 允许任何的head头部
        corsConfiguration.addAllowedOrigin("*"); // 允许任何域名使用
        corsConfiguration.addAllowedMethod("*"); // 允许任何的请求方法
        corsConfiguration.setAllowCredentials(true);
        return corsConfiguration;
    }

    // 添加CorsFilter拦截器,对任意的请求使用
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }

}

最初のピットの他に、これは巨大なピットです。クッキーの携帯をリクエストする

パスワードマネージャーを記憶するためにShiroConfigにCookieRememberMeManagerを挿入しました。このプロセスでは、記憶パスワードマネージャーがrememberMeという名前のCookieを作成し、このCookieのmaxAgeを1日に設定すると同時に、新しいUsernamePasswordToken(username、 password、true)、自動的にtrueにログインするかどうかという3番目のパラメーターを変更します。過去のlayuiの使用の緊急性に応じて、ログイン後、システムはフロントエンドに2つのパラメーターを作成します。1つはJSESSIONIDと呼ばれ、もう1つはrememberMeと呼ばれます。次のように:

 しかし、私のvueログインインターフェイスに正常にログインした後、

次の問題が発生しました。

1:これらの2つのパラメーターはCookieに含まれていません。

2:同時に、認証認証を実行する場合、システムはShiroRealmのログイン認証インターフェイスのみを使用し、認証認証インターフェイスは使用しません。WTF?(長い間検索した後、理由を見つけるにはあまりにも怒っています)

3:Googleの開発者デバッグモードのネットワークを開き、リクエストにCookieがないことを確認します(これが最もひどいポイントです)。

それで、その理由は何ですか。

Axiosリクエストは、デフォルトではCookieを伝送しません。手動でオンにする必要があります。属性withCredentialsをtrueに設定するだけです。1つの属性で3つの問題が解決されます。次のように

(さらに、写真では、axiosがリクエストヘッダーをインターセプトし、Authorizationという名前のヘッダーを設定しました。これはshiroとは関係ありません。これがswaggerでトークンインターセプト検証を設定する方法です。これは前のswaggerで説明されているようです-関連ブログ) 


3番目のピットについて話しましょう。x-www-form-urlencoded形式でデータを転送する

上の写真では、インターセプターにcontent-type: 'application / json'を設定しています。

しかし、それは実際には役割を果たしていませんでした。このインターセプターでcontent-typeを削除した後も、リクエストはデフォルトのjson形式のままです。

もちろん、リクエストの大部分はjson形式であり、問​​題はありませんが、@ ModelAttributeアノテーションでバインドされたパラメーターを持つpostインターフェイスのバックエンドがあります。デフォルトのjson形式では、このパラメーターを取得できません。現時点では、リクエストリクエストの形式をapplication / x-www-form-urlencodedに変更する必要があります。

ただし、これを変更する方法は、元々バックグラウンドに渡される予定だったパラメータオブジェクトproductを、新しいURLSearchParams(product)でデータにラップすることです

 

 

 

おすすめ

転載: blog.csdn.net/nienianzhi1744/article/details/103508966