Spring аутентификация недоступна в созданном пользователем потоке
Я использую аутентификацию на основе пружины путем реализации UserDetailsService. Ниже мой весенний конфиг
<authentication-manager>
<authentication-provider user-service-ref="authenticationService">
<password-encoder ref="passwordEncoder">
<salt-source ref="authenticationService"/>
</password-encoder>
</authentication-provider>
</authentication-manager>
Мой сервис аутентификации выглядит так:
public class AuthenticationServiceImpl implements AuthenticationService, UserDetailsService, SaltSource {
....
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
....
return new org.springframework.security.core.userdetails.User(username, user.getPassword(), true, true, true, true, authorities);
}
}
Теперь проблема в том, когда я создаю новую нить из одного из моих пружинных контроллеров. Как аутентифицировать моего пользователя в этой теме?
2 ответа
SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(loadUserByUsername), password));
Я нашел лучшее решение, чтобы установить его в самой конфигурации. Используя следующий код:
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass"
value="org.springframework.security.core.context.SecurityContextHolder"/>
<property name="targetMethod" value="setStrategyName"/>
<property name="arguments"><b:list><b:value>MODE_INHERITABLETHREADLOCAL</value></list></property>
</bean>
Работает как шарм.