2011-10-25 5 views
0

春のセキュリティアプリのデプロイメント後に初めてログインすると、すべてが魅力的に機能します。しかし、最初のログアウト後、サービスが再開されるまで私は再びログインできません!また、ユーザーのデータがhibernate sql-logにロードされているのがわかるように、ログインが成功したようです。ここなぜ、サーバーが再起動されるまで、Spring3 Securityのログインはちょうど1回しか動作できないのですか?

関連するコードフラグメント: のApplicationContext-のsecurity.xml:

<global-method-security pre-post-annotations="enabled" /> 
<http auto-config="true" use-expressions="true" security="none" pattern="/bookmark/add" /> 

<http auto-config="true" 
     use-expressions="true" 
     access-denied-page="/user/login" 
     disable-url-rewriting="true"> 
    <intercept-url pattern="/dashboard/**" access="isAuthenticated()" /> 
    <intercept-url pattern="/user/**" access="permitAll" /> 
    <intercept-url pattern="/**" access="permitAll" /> 

    <form-login 
      default-target-url="/dashboard" 
      login-page="/user/login" 
      login-processing-url="/user/doLogin" 
      authentication-failure-url="/user/login/error" 
      username-parameter="email" 
      password-parameter="password" /> 

    <logout logout-success-url="/user/logout" 
      logout-url="/user/doLogout" 
      invalidate-session="true" 
      delete-cookies="true" /> 

    <remember-me services-ref="rememberMeServices" key="myfancysalt" /> 

    <session-management invalid-session-url="/user/login"> 
     <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> 
    </session-management> 
</http> 

<authentication-manager alias="authenticationManager"> 
    <authentication-provider user-service-ref="loginUserDetailsService"> 
     <password-encoder ref="passwordEncoder" hash="sha-256"> 
      <salt-source system-wide="myfancysalt" /> 
     </password-encoder> 
    </authentication-provider> 
</authentication-manager> 

<beans:bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder" /> 

<beans:bean id="rememberMeFilter" class="org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter"> 
    <beans:property name="rememberMeServices" ref="rememberMeServices"/> 
    <beans:property name="authenticationManager" ref="authenticationManager" /> 
</beans:bean> 

<beans:bean id="rememberMeServices" class="org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices"> 
    <beans:property name="userDetailsService" ref="loginUserDetailsService"/> 
    <beans:property name="key" value="myfancysalt"/> 
</beans:bean> 

<beans:bean id="rememberMeAuthenticationProvider" class="org.springframework.security.authentication.RememberMeAuthenticationProvider"> 
    <beans:property name="key" value="myfancysalt"/> 
</beans:bean> 

LoginController:web.xmlの

@RequestMapping(value = "login", method = RequestMethod.GET) 
public String login(Principal principal) { 
    if (principal != null) { // If user is already logged in, redirect him 
     return "redirect:/dashboard"; 
    } 
    return "user/login"; 
} 

@RequestMapping(value = {"login/error", "/user/doLogin"}) 
public ModelAndView processLogin(Principal principal) { 
    if (principal != null) { // If user is already logged in, redirect him 
     return new ModelAndView("redirect:/dashboard", null); 
    } 
    HashMap map = new HashMap(); 
    map.put("error", true); 

    return new ModelAndView("user/login", map); 
} 

@RequestMapping(value = "logout") 
public ModelAndView logout() { 
    return new ModelAndView("user/logout"); 
} 

必要フィルタが存在します。

ご協力いただきありがとうございます。

### EDIT ###

問題は、同時セッションの制限に嘘をつきました。 applicationcontext-security.xmlから次の部分を削除した後、すべて正常に動作します。誰かがそれに何が間違っているか教えてもらえますか? (私はちょうどそれをいくつかのハウツからコピー/貼り付けています)。

<session-management invalid-session-url="/user/login"> 
    <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> 
</session-management> 
+0

問題の特定のみ:「Remember Me」機能を削除するとどうなりますか? – Ralph

+0

'loginUserDetailsS​​ervice'に関連するコードを投稿できますか? – Simeon

+0

「Remember Me」を削除しても何も変更されていません –

答えて

0

あなたはやろうとすることができる。

principal == null 

あなたがログアウトする前に。

+0

"principal = null"を意味しましたか?とにかく彼をログアウトする前にログインしたユーザーをチェックすることで、彼が再びログインするのを防ぐ方法がわからない。 "principal = null"を意味する場合 - 私はそれを試しましたが、何もしていないようです。 –

関連する問題