0

Я использую логин Facebook для аутентификации в своем приложении. Я использую фильтр проверки подлинности.spring-social Facebook не установлен Объект аутентификации

Аутентификация прошла нормально, но когда она перенаправляется на главную страницу, фильтр, похоже, не устанавливает объект аутентификации, поэтому вызов SecurityContextHolder.getContext(). GetAuthentication() возвращает значение null. Это происходит только в первый раз, когда пользователь авторизует наше приложение. После этого этого не происходит.

В настоящее время, чтобы получить установленный объект аутентификации, пользователю необходимо дважды войти в систему с facebook. Во второй раз, когда на самом деле нет каких-либо логинов, фильтр выглядит так, будто он подбирает куки-файл и выполняет аутентификацию, и даже больше не нужно переходить на Facebook.

Так что мой вопрос, почему мне нужно пройти фильтр дважды? Или как я могу избежать этого?

конфигурации выглядит следующим образом:

<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&amp;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> 

ответ

0

Похоже, весна не обрабатывает, что по себе, что своего рода имеет смысл, хотя я чувствую, что это должно быть возможным для конфигурации, вместо того, чтобы написать код для него. В любом случае, вот как мы это сделали:

@RequestMapping("/signup") 
public String signUp(WebRequest request) { 
    Connection<?> connection = providerSignInUtils.getConnectionFromSession(request); 
    User user = usersConnectionRepository.createUser(connection); 
    getRepository().save(user); 
    providerSignInUtils.doPostSignUp(user.getId().toString(), request); 
    // the following will automatically log in the user after sign up 
    SecurityContextHolder.getContext().setAuthentication(new SocialAuthenticationToken(connection, user, null, user.getAuthorities())); 
    return "redirect:/home"; 
} 
Смежные вопросы