Я хочу интегрировать Spring Social facebook в мое приложение с Spring Security (я использую xml-конфигурации). Все, что мне нужно, это просто подключить учетную запись facebook с учетной записью моего приложения. В простом примере я нашел это:Spring Social facebook + Spring Security
<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);
}
Это resives "userId
" от #{request.userPrincipal.name}
. Итак, мой вопрос: как я могу передать «userId
» этому методу, если я хочу получить это «userId
», используя SecurityContextHolder.getContext().getAuthentication().getPrincipal()
.
Единственный способ, который я вижу, - создать мою реализацию JdbcUsersConnectionRepository
и переопределить метод createConnectionRepository(String userId)
. Но, возможно, есть более элегантное решение.
В Спринг социальной 1.0.x, то SPEL это лучший способ (хотя и немного громоздкий). В Spring Social 1.1.0 есть новое пространство имен конфигурации на основе XML и интерфейс UserIdSource. Вы реализуете UserIdSource для поиска идентификатора пользователя (как вы считаете нужным) и настраиваете его как компонент. Элементы конфигурации XML будут искать этот UserIdSource и использовать его. –
FWIW, тот факт, что выражения SpEL являются просто строками и, следовательно, не легко проверяются или обязательно являются типичными, это главная причина, по которой они чувствуют себя kludgy здесь. Но в силу того факта, что вы выбираете XML для конфигурации, вы уже решили не использовать конфигурационную конфигурацию. Что мне интересно, почему вы не хотите использовать конфигурацию Java, которая является более мощным и типичным вариантом для настройки Spring? –
Спасибо за разъяснение Крейга. Интерфейс UserIdSource - хорошая новость (нам нужно дождаться 1.1.0.RELEASE, чтобы иметь возможность использовать его в производственном коде). Для вас второй вопрос: причина проста. У нас есть проект, который уже использует конфигурацию на основе xml для Spring и Spring Security (фреймворки). Аннотации используются только для бланков аппликации. Я думаю, что для команды поддержки будет более комфортно иметь все файлы конфигурации в одном формате (xml). Невозможно выполнить java conf с Spring Security AFAIK. –