Я хочу интегрировать Facebook Spring Social в свое приложение с помощью Spring Security (я использую конфигурации xml). Все, что мне нужно, это просто подключить учетную запись facebook к учетной записи моего приложения. В простом примере я нашел это:
<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>
Итак, как я понял, в дело вступает такой метод:
public ConnectionRepository createConnectionRepository(String userId) {
if (userId == null) {
throw new IllegalArgumentException("userId cannot be null");
}
return new JdbcConnectionRepository(userId, jdbcTemplate, connectionFactoryLocator, textEncryptor, tablePrefix);
}
Он извлекает "userId
" из #{request.userPrincipal.name}
. Итак, мой вопрос: как я могу передать «userId
» этому методу, если я хочу получить это «userId
», используя SecurityContextHolder.getContext().getAuthentication().getPrincipal()
.
Единственный способ, который я вижу, это создать свою реализацию JdbcUsersConnectionRepository
и переопределить метод createConnectionRepository(String userId)
. Но, возможно, есть более элегантное решение.