Spring Social Linkedin - Войти
Я новичок в Spring Social и пытаюсь настроить Spring Social Signin для linkedin.
Мой весенний конфигурационный файл ниже,
<context:component-scan base-package="com.tc.web">
<context:include-filter type="regex"
expression="(service|controller|component)\..*" />
</context:component-scan>
<bean id="connectionFactoryLocator"
class="org.springframework.social.connect.support. ConnectionFactoryRegistry">
<property name="connectionFactories">
<list>
<bean
class="org.springframework.social.linkedin.connect .LinkedInConnectionFactory">
<constructor-arg value="key........" />
<constructor-arg value="secret .........." />
</bean>
</list>
</property>
</bean>
<bean id="textEncryptor" class="org.springframework.security.crypto.encrypt .Encryptors"
factory-method="noOpText" />
<bean id="usersConnectionRepository"
class="org.springframework.social.connect.jdbc.Jdb cUsersConnectionRepository">
<constructor-arg ref="dataSource" />
<constructor-arg ref="connectionFactoryLocator" />
<constructor-arg ref="textEncryptor" />
</bean>
<bean id="connectionRepository" factory-method="createConnectionRepository"
factory-bean="usersConnectionRepository" scope="request">
<constructor-arg value="#{request.userPrincipal.name}" />
<aop:scoped-proxy proxy-target-class="false" />
</bean>
<bean id="signInAdapter" class="com.tc.web.social.signin.SocialSignInAdapte r" />
<bean class="org.springframework.social.connect.web.Prov iderSignInController">
<!-- relies on by-type autowiring for the constructor-args -->
<constructor-arg ref="signInAdapter" />
<property name="applicationUrl" value="link" />
<property name="signUpUrl" value="link" />
<property name="signInUrl" value="link" />
</bean>
Мой SocialSignInAdapter.java есть,
открытый класс SocialSignInAdapter реализует SignInAdapter{
@Override
public String signIn(String userId, Connection<?> connection, NativeWebRequest request) {
System.out.println("User Id is ===>>> "+userId);
System.out.println("Connection is ====>>> "+connection);
return null;
}
}
В Login.jsp,
<li class="linkedin"><a href="${pageContext.request.contextPath}/signin/linkedin" title="LinkedIn"> </a></li>
Когда я нажимаю ссылку выше, я получаю ошибку 404.
Я предполагаю, что мое приложение не может найти ProviderSignInController для запроса://dom:8080/myApp/signin/linkedin.
Я подозреваю, что ниже конфиг весной XML.
<context:component-scan base-package="com.tc.web">
<context:include-filter type="regex"
expression="(service|controller|component)\..*" />
</context:component-scan>
У меня есть весь мой контроллер в пакете com.tc.web. Но ProviderSignInController находится в пакете Spring, и мое приложение не может его найти.
Я попробовал ниже также.
<context:component-scan base-package="com.tc.web,org.springframework.social.con nect.web">
<context:include-filter type="regex"
expression="(service|controller|component)\..*" />
</context:component-scan>
Я получил неоднозначную ошибку отображения для ProviderSignInController с вышеуказанным конфигом. Итак, я удалил
<bean class="org.springframework.social.connect.web.Prov iderSignInController">
<!-- relies on by-type autowiring for the constructor-args -->
<constructor-arg ref="signInAdapter" />
<property name="applicationUrl" value="link" />
<property name="signUpUrl" value="link" />
<property name="signInUrl" value="link" />
</bean>
из моей весны xml. Но все равно я получаю ошибку 404.
Может ли кто-нибудь помочь мне в этом, пожалуйста..........
Спасибо, Baskar.S
1 ответ
Контроллером, который обрабатывает запросы на вход, является org.springframework.social.connect.web.ProviderSignInController (представлен в spring-social-web-xxxjar).
@RequestMapping(value="/{providerId}", method=RequestMethod.POST)
public RedirectView signIn(@PathVariable String providerId, NativeWebRequest request)
Итак, как видите, он принимает только POST-запросы. Вам нужно будет изменить тег привязки ссылки на кнопку, которая вызывает отправку формы. например
<form action="<c:url value="/signin/linkedin" />" method="POST" id="frmLiConnect"></form>
Во-вторых, для Spring Controller, расширьте ProviderSignInController вашим собственным фиктивным контроллером, чтобы класс Spring был доступен.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.social.connect.ConnectionFactoryLocator;
import org.springframework.social.connect.UsersConnectionRepository;
import org.springframework.social.connect.web.ProviderSignInController;
import org.springframework.social.connect.web.SignInAdapter;
import org.springframework.stereotype.Controller;
@Controller
public class SigninController extends ProviderSignInController {
@Autowired
public SigninController(ConnectionFactoryLocator connectionFactoryLocator,
UsersConnectionRepository usersConnectionRepository,
SignInAdapter signInAdapter) {
super(connectionFactoryLocator, usersConnectionRepository, signInAdapter);
// TODO Auto-generated constructor stub
}
}
Для получения более подробной информации вы также можете обратиться к примерам Spring Social Showcase по ссылке ниже. https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase/src/main/java/org/springframework/social/showcase/signin
Надеюсь это поможет.