SpringBoot史郎統合は(5)クロスドメインおよび@Cacheableキャッシュ/ @トランザクション注釈トランザクションの失敗を含み、

(多くの場合、アイテムを分離する前の後縁で見られる)1.クロスドメイン

  (1)  クロスドメイン記述は、を参照することができるクロスドメイン(CORS)

  クロスドメイン法を解く(2)SpringBootあります。

    A.使用@CrossOriginコメント。

    B.フィルターは、クラスメソッドのオーバーライドを達成のdoFilter

パッケージcom.ruhuanxingyun.config。

cn.hutool.core.util.StrUtilインポート;
輸入org.springframework.context.annotation.Configuration。
輸入org.springframework.http.HttpHeaders。
輸入org.springframework.http.HttpMethod;
輸入org.springframework.http.HttpStatus;

インポートのjavax.servlet。*;
輸入javax.servlet.annotation.WebFilter;
インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse;
インポートにjava.io.IOException;

@WebFilter(FILTERNAME = "CorsFilter")
パブリッククラスCorsFilter実装フィルター{

    @オーバーライド
    公共ボイドのdoFilter(REQのServletRequest、ServletResponseをRES、れるFilterChain鎖)にIOException、ServletExceptionがを{スロー
        HttpServletRequestのリクエスト=(HttpServletRequestの)REQ。
        HttpServletResponseの応答=(HttpServletResponseの)RES。
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN、 "*");
        response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS、 "GET、POST、OPTIONS、PUT、DELETE"); 
     //低いバージョンのブラウザがサポートしていません* response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS、 "認可、Content-Typeの"); //送信オプション時にクロスドメインリクエスト IF(StrUtil.equals(request.getMethod()、HttpMethod.OPTIONS.name())){ response.setStatus(HttpStatus.OK.value())。 } そうしないと { chain.doFilter(REQ、RES)。 } } }

    しかしSpringBoot統合史郎後、クロスドメインの理由の失敗のコメント:史郎フィルタは、クロスドメインリクエストへのリード線がクロスドメインエラーが発生するように、史郎フィルタに到達するために許可されていないノートはクロスドメイン処理、前に実行されます

  (3)クロスドメイン四郎に、2つの方法があります

    A.継承BasicHttpAuthenticationFilterクラス、メソッドをオーバーライドしpreHandle

/ ** 
*サポートクロスドメイン提供
*
* @paramリクエスト要求オブジェクトを
応答オブジェクトは* @param応答
* @returnクロス許容
* @throws例外異常情報
* /
@Overrideは
ブールザpreHandle(のServletRequest要求、ServletResponseをレスポンス){例外をスロー保護しました
=のHttpServletRequestのHttpServletRequest(HttpServletRequestの)要求、
HttpServletResponseのHttpServletResponseの=(HttpServletResponseの)応答;
httpServletResponse.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN、 "*");
httpServletResponse.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS、 "GET、POST、OPTIONS、PUT、DELETE")。
//ブラウザのバージョンが低いをサポートしていません*
httpServletResponse.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS、 "認可、Content-Typeの");
//跨域时会发送オプション请求
IF(StrUtil.equals(httpServletRequest.getMethod()、HttpMethod.OPTIONS.name())){
httpServletResponse.setStatus(HttpStatus.OK.value())。

falseを返します。
}

super.preHandle(リクエスト、レスポンス)を返します。
}

  フィルタのB.実現、(上記のような)のdoFilterオーバーライドメソッド

2. @Cacheableキャッシュ/ @トランザクション注釈トランザクション障害

  (1)問題を反映:キャッシングとトランザクション注釈クラスの障害が使用される他のサービストランザクションは正常に使用することができるが@Autowiredは、フレームワーク四郎(loginRealm、jwtRealm)でクラスを注入しました

  (2)理由:権利シロアノテーションを導入し、defaultAdvisorAutoProxyCreator authorizationAttributeSourceAdvisorクラスを配置するために、それらはshiroFilterFactoryBeanがFactoryBeanのインターフェイスを実現するので、対応するプロキシクラスのオブジェクトを生成し、@RequiredPermission AOPモードのクラスによって拡張され、それがあろう事前に初期化され、その無効なトランザクションの問題を引き起こし、彼らはラップされていないトランザクションAOPで、その結果、事前に関連するすべての豆の初期化を高めます

  (3)溶液

    A. @Autowired + @Lazy注釈遅延ローディング注射

    B.使用レルムでマッパーを直接ではなく、サービス

    C. ApplicationContextRegister.getBean()メソッドは、マニュアル注入ビーン

 

おすすめ

転載: www.cnblogs.com/ruhuanxingyun/p/12147918.html