2017-07-02 7 views
0

私は現在、私のプロジェクトに春のセキュリティを使用しています。 (覚え-私を機能するためのユーザー)このBeanを追加した後:なぜ突然春が私にアスペクトを求めているのですか?

<b:bean id="jdbcTokenRepository" class="org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl"> 
     <b:property name="createTableOnStartup" value="false"/> 
     <b:property name="dataSource" ref="dataSource"/> 
    </b:bean> 

ユーザートークンがまだ保存されませんでした。 「dataSource」がautoCommit = falseに設定されているため、すべてです。

(私は1つの以上のクラスを作成する必要がありましたが、それは働いていたので、本当に醜い)だから私がした最初のものだった:

import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl; 
import org.springframework.transaction.annotation.Transactional; 

@Transactional 
public class TransactionalJdbcTokenRepositoryImpl extends JdbcTokenRepositoryImpl {} 

だから、私のためのより良い解決策は以下ました:

<b:bean id="jdbcTokenRepository" 
       class="org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl"> 
     <b:property name="createTableOnStartup" value="false"/> 
     <b:property name="dataSource" ref="dataSource"/> 
    </b:bean> 

    <tx:advice id="tokenRepoAdvice" transaction-manager="transactionManager"> 
     <tx:attributes> 
      <tx:method name="*"/> 
     </tx:attributes> 
    </tx:advice> 

    <aop:config proxy-target-class="false" expose-proxy="false"> 
     <aop:advisor id="tokenRepoAdvisor" 
          advice-ref="tokenRepoAdvice" 
          pointcut="bean(jdbcTokenRepository)"/> 
    </aop:config> 

純粋なXML不要なクラス:

しかし、何らかの理由で春にはaspectjが必要になります!

Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) 
... 68 more 

なぜですか?この設定がなければ、私のDAO層は@Transactionalアノテーションだけでうまくいきました。 aspectjライブラリの追加を避けるにはどうしたらxmlの設定を保持するのですか?

答えて

0

春のドキュメントを再読み込みした後、私は解決策を発見した:

<tx:advice id="tokenRepoAdvice" transaction-manager="transactionManager"> 
     <tx:attributes> 
      <tx:method name="*"/> 
     </tx:attributes> 
    </tx:advice> 

    <bean id="jdbcTokenRepository" 
      class="org.springframework.aop.framework.ProxyFactoryBean"> 
     <property name="proxyInterfaces" alue="org.springframework.security.web.authentication.rememberme.PersistentTokenRepository"/> 
     <property name="target"> 
      <bean class="org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl"> 
       <property name="createTableOnStartup" value="false"/> 
       <property name="dataSource" ref="dataSource"/> 
      </bean> 
     </property> 
     <property name="interceptorNames"> 
      <list> 
       <value>tokenRepoAdvice</value> 
      </list> 
     </property> 
</bean> 

を、初期問題がJdbcTokenRepositoryImplの親クラスだった(それは、最終的なメソッドを持っている - AspectJのが必要な理由です)

+1

理由AspectJの''を使用していたためにPointcutがAspectJで解析されました。 –

関連する問題