2014-05-01 42 views
1

如果我的spring安全工作,我怎麼能調用一個bean來初始化所有用戶數據,一旦它已經登錄?我可以做一個Servlet過濾器,但它會在每個請求中調用它。我想在用戶登錄後調用一些初始化代碼來將一些用戶數據加載到會話中。春季安全登錄成功後調用bean?

回答

1

當用戶正確登錄時,spring security調用AuthenticationSuccessHandler的實例。你想要做的是創建你自己的bean並使用它來執行你想要的任何額外的操作。

你的類可能會是這個樣子:

public class YourAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { 

     @Override 
     public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { 

     //do whatever you want 
     super.onAuthenticationSuccess(request, response, authentication); 
    } 
} 

而且註冊類作爲一個Spring bean

<beans:bean id="authenticationSuccessHandler" 
      class="your.package.YourAuthenticationSuccessHandler"/> 

,並把它添加到表單登錄的安全配置作爲authentication-success-handler-ref

+0

非常感謝!如果在我的spring-security.xml中包含,那麼這是一個很好的解決方案。如果我將它包含在myapp-servlet.xml中,它找不到它(無法解析bean引用)?任何想法爲什麼?它不應該能夠嗎? – user3594045

+0

@ user3594045很高興幫助!這完全取決於你的配置。這不是給定的,你可以在任何配置中添加bean,它會起作用。 – geoand

+0

有趣。我不知道。我認爲Spring首先加載了所有依賴的配置,然後啓動了所有的連線。這是工作呢!謝謝! – user3594045