Spring AOPとSpring Bootを使用して、休止状態のフィルタを有効にしようとしています。私はスターター点としてこの記事を使用しました。これまでのところ、私はHibernateセッションを傍受することができていないHow to enable hibernate filter for sessionFactory.getCurrentSession()?AOPとSpring Bootを使用してハイバネートフィルタを有効にするには?
:org.hibernate.internal.SessionFactoryImpl.SessionBuilderImpl.openSessionを()。
マイアスペクトクラスには、次のようになります。
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.hibernate.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import com.acme.CustomUserDetails;
@Component
@Aspect
public class ACLFilter {
Logger log = LoggerFactory.getLogger(ACLFilter.class);
@AfterReturning(pointcut = "execution(* org.hibernate.internal.SessionFactoryImpl.openSession(..)))", returning = "session")
public void forceFilter(JoinPoint joinPoint, Object session) {
Session hibernateSession = (Session) session;
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
Long userId = ((CustomUserDetails) auth.getDetails()).getUserId();
// Session session = em.unwrap(Session.class);
hibernateSession.enableFilter("groupACL").setParameter("userId", userId);
}
@Before("execution(* org.hibernate.SessionFactory.openSession(..)))")
public void do2(JoinPoint joinPoint) {
System.out.println("############################do2");
}
@Before("execution(* org.hibernate.SessionBuilder.openSession(..)))")
public void do3(JoinPoint joinPoint) {
System.out.println("############################do3");
}
@Before("execution(* org.hibernate.internal.SessionFactoryImpl.SessionBuilderImpl.openSession(..)))")
public void do4(JoinPoint joinPoint) {
System.out.println("############################do4");
}
}
これは私が傍受しようとしたすべてのクラス/メソッドです。また、アスペクトクラスがテストクラス/メソッドで正しく動作していることを検証しました。そのため、AOPの設定は正しいです。 デバッグ中に、システムがorg.hibernate.internal.SessionFactoryImpl.SessionBuilderImpl.openSession() をトリガーするのを見ることができますが、インターセプタは起動しません。 マイapplication.propertiesファイルには、このエントリを含める:
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
私は何をしないのですか?
構文の強調表示に適切な言語を選択するように注意してください。あなたのコードはJavaScript + HTMLではなくJavaです。私はあなたのためにそれを修正しました。 – kriegaex