0

私たちのプロジェクトはSpring + Spring Security + Maven + Hibernate + JSF + Icefacesです

currentUser の値を定義する必要がありますが、ユーザーがログインするまで定義できません。

public static UserDetails currentUserDetails(){
    SecurityContext securityContext = SecurityContextHolder.getContext();
    Authentication authentication = securityContext.getAuthentication();
    if (authentication != null) {
        Object principal = authentication.getPrincipal();
        return (UserDetails) (principal instanceof UserDetails ? principal : null);
    }
    return null;
}

サーバーの起動時に定義を含めようとすると、(予想どおり) nullpointerException がスローされます。

私たちの現在の方法は、getter メソッドで遅延定義することです。したがって、JSF が呼び出すたびに HQL が実行されますが、これは非常にコストがかかります。

ユーザーがすでにログインした後に currentUserDetails メソッドを 1 回だけ実行する方法についてアドバイスをいただけますか?

4

1 に答える 1

0

security.xml ファイルでタグを使用する場合、次<form-login>のように成功ログイン コールバックを定義できます。

<form-login 
authentication-success-handler-ref="authenticationSuccessHandler"/>

<bean id="authenticationSuccessHandler" class="com.test.MyAuthenticationSuccessHandler"/>

と豆の実装

public class MyAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

  @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
   // use authentication object to fetch the user object and update its timestamp
   }
}

お役に立てば幸いです。幸運を。

于 2013-07-31T18:36:38.473 に答える