Ich benutze Facebook-Login in meiner Anwendung zu authentifizieren. Ich benutze den Authentifizierungsfilter.spring-social Facebook-Login setzt nicht Authentifizierungsobjekt
Die Authentifizierung ist OK, aber wenn sie zurück zur Startseite umgeleitet wird, scheint der Filter das Authentifizierungsobjekt nicht zu setzen, so dass der Aufruf von SecurityContextHolder.getContext(). GetAuthentication() null zurückgibt. Dies geschieht nur zum ersten Mal, wenn der Nutzer unsere App autorisiert. Es passiert danach nicht.
Um das Authentifizierungsobjekt zu setzen, muss sich der Benutzer derzeit zweimal bei Facebook anmelden. Das zweite Mal, wenn es keine Logins macht, sieht der Filter so aus, als ob er den Cookie aufnimmt und die Authentifizierung durchführt und nicht einmal mehr zu Facebook gehen muss.
Also meine Frage ist, warum muss ich zweimal durch den Filter gehen? Oder wie kann ich das vermeiden?
Konfiguration sieht wie folgt aus:
<bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<constructor-arg value="/login"/>
<property name="useForward" value="true"/>
</bean>
<bean class="com.gigi.web.SpringDataUserDetailsService" id="userService"/>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider user-service-ref="userService"/>
<security:authentication-provider ref="socialAuthenticationProvider" />
</security:authentication-manager>
<bean class="org.springframework.social.security.SocialAuthenticationFilter" id="socialAuthenticationFilter">
<constructor-arg ref="authenticationManager" />
<constructor-arg ref="userIdSource" />
<constructor-arg ref="usersConnectionRepository" />
<constructor-arg ref="connectionRegistry" />
<property name="postLoginUrl" value="/home" />
<property name="defaultFailureUrl" value="/login?error&social" />
<property name="signupUrl" value="/user/signup" />
</bean>
<bean class="org.springframework.social.connect.web.ProviderSignInUtils">
<constructor-arg ref="connectionRegistry"/>
<constructor-arg ref="usersConnectionRepository"/>
</bean>
<bean id="userIdSource" class="org.springframework.social.security.AuthenticationNameUserIdSource" />
<bean id="socialAuthenticationProvider"
class="org.springframework.social.security.SocialAuthenticationProvider">
<constructor-arg ref="usersConnectionRepository" />
<constructor-arg ref="userService" />
</bean>
<bean id="userSocialConnectionService" class="com.gigi.web.UserSocialConnectionController"></bean>
<bean id="usersConnectionRepository" class="com.gigi.social.SpringDataUsersConnectionRepository">
<constructor-arg ref="connectionRegistry" />
</bean>
<bean id="connectionRegistry"
class="org.springframework.social.security.SocialAuthenticationServiceRegistry">
<property name="authenticationServices">
<list>
<bean class="org.springframework.social.facebook.security.FacebookAuthenticationService">
<constructor-arg value="${facebook.app.id}" />
<constructor-arg value="${facebook.app.secret}" />
<constructor-arg value="${facebook.app.namespace}" />
</bean>
</list>
</property>
</bean>