2017-10-30 6 views
0

MySqlの読み取りと複製をSpringアプリケーションでデバッグしている間に、ACLを取得するクエリがマスタでありスレーブではないことがわかりました。私はjdbc:mysql:replication://接続文字列を使用しています。これは、非ACLデータのために@Transactional(readOnly = true)にラップされているコールで動作しているようです。スプリングセキュリティACLルックアップを使用してmysql読み取りレプリカを使用する

JPL設定と同じデータソースを使用して、LookupStrategyをBasicLookupStrategyで設定しています。

LookupStrategyが接続を読み取り専用としてマークしていないかのようです。

これは正常ですか?この動作を変更する方法はありますか?

答えて

0

のでBasicLookupStrategyのために、すべてのソースを通して読んだ後、私はそれが行われていた、または行うことができるどこでも場所を確認しませんでした。それから、BasicLookupStrategyはjdbcTemplateをprivateとして拡張できないようにします。 UG ...だから、私は両方に同じデータソースを使用しています前とlookupPrimaryKeysjdbcTemplate.queryへの呼び出しとlookupObjectIdentities

private void setConnectionReadOnly(boolean readOnly) { 
    log.debug("setting JDBC connection to {}", readOnly); 
    try { 
     Connection con = DataSourceUtils.getConnection(jdbcTemplate.getDataSource()); 
     con.setReadOnly(readOnly); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 
0

Spring Security 3.0では、BasicLookupStrategyクラスが用意されています。そのクラスのコンストラクタでは、データベースにヒットするために使用されるDataSourceを挿入できます。だから私の提案は、その実装を使用して、不必要なデータベースアクセスを避けるためにACLCacheを実装することです。

https://docs.spring.io/spring-security/site/apidocs/org/springframework/security/acls/jdbc/BasicLookupStrategy.html

+0

後に呼ばれていますちょうどそれBasicReadOnlyLookupStrategyを呼び出して、クラス全体を対処終わったし、次の方法をsetConnectionReadOnly "追加既に – denov

関連する問題