Я новичок в обеспечении безопасности весны и изучил концепции AuthenticationInterceptor
, AuthenticationManager
, UserLoginService
. Я знаю, как реализовать пользовательский сервис для проверки действительного пользователя в системе. Проблема состоит в том, что у нас есть два типа пользователей: 1) Специалисты 2) Пользователи и их учетные данные хранятся в двух разных таблицах. Реализация UserDetailsService
должна проверять обе таблицы для аутентификации и получения информации о пользователе. Существует ли возможность использовать несколько провайдеров проверки подлинности и использовать их в зависимости от типа пользователя? или Должен ли я использовать тот же поставщик проверки подлинности, чтобы запрашивать обе таблицы, чтобы узнать правку пользователя? Каков наилучший способ справиться с этими сценариями, когда пользователь должен искать в двух таблицах?Освещенность весны безопасности
0
A
ответ
0
Я думаю, что вы можете сделать что-н, как:
@Autowired
private UsersDAO usersDAO;
@Autowired
private OtherDAO otherDAO;
@Override
@Transactional
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {
Users user = usersDAO.find(username);
Other oth = otherDAO.find(username);
// your queries
if(check if your desire is correct based on user){
List<GrantedAuthority> authorities = buildUserAuthority(user.getUserRole());
return buildUserForAuthentication(user, authorities);
} else {
//...
}
}
+0
Да, мы можем сделать это так. Я ищу другие лучшие возможности. В любом случае, спасибо! – Keerthivasan
+0
Возможно, вы захотите изменить свой менеджер аутентификации. Возможно, этот пост может удовлетворить ваши требования. http://krams915.blogspot.com.tr/2010/12/spring-security-mvc-integration-using_26.html –
Вы хотите иметь один фактор аутентификации, такие как имя пользователя, и имея имя вы хотите найти это в разных таблицах? Например, пользователь X попытался войти в систему, и вы проверили X в таблице пользователя, а также в другой таблице? –
Да, абсолютно верно. – Keerthivasan