Для добавления пользовательской проверки к клиентским или пользовательским учетным данным вы можете увеличить DaoAuthenticationProvider и назначить соответствующую службу сведений о пользователе. Переопределите его additionalAuthenticationChecks(...)
метод для добавления пользовательского поведения.
public class AugmentedDaoAuthenticationProvider extends DaoAuthenticationProvider {
@Override
protected void additionalAuthenticationChecks(final UserDetails userDetails, final UsernamePasswordAuthenticationToken authentication) {
final User user = userDao.findByUsername(userDetails.getUsername())
.orElseThrow(() -> new BadCredentialsException("Incorrect username or password."));
// custom authentication logic
// Perform the actual authentication.
super.additionalAuthenticationChecks(userDetails, authentication);
Инициализируйте компонент и назначьте соответствующую службу сведений о пользователе: если дополнительная проверка подлинности выполняется для учетных данных пользователя, тогда назначьте UserDetailsService и дляучетные данные клиента, назначьте ClientDetailsUserDetailsService
<bean id="clientAuthenticationProvider" class="com.test.AugmentedDaoAuthenticationProvider">
<property name="userDetailsService" ref="clientDetailsUserDetailsService"/>
Решение вопроса в разделе комментариев:
ClientDetailsUserDetailsService реализует UserDetailsService и имеет конструктор, который принимает ClientDetailsService в качестве аргумента. Инициализация бина будет выглядеть следующим образом:
<bean id="clientDetailsUserDetailsService" class="org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService">
<constructor-arg name="clientDetailsService" ref="serviceProviderClientDetailsService"/>
</bean>
Затем вы можете ссылаться на этот clientDetailsUserDetailsService
на свой DaoAuthenticationProvider
.