Я новичок в Spring, и мое требование состоит в том, чтобы я не хотел аутентифицировать пользователя с помощью имени пользователя и пароля.
Пользователь аутентифицируется в каком-то другом приложении, и мое приложение получает запрос со следующими данными:
- Имя пользователя
- Роли
Я просто хочу использовать Spring Security для защиты страниц в соответствии с ролями в запросе.
Я подумал о написании UserDetailService, но при этом добавляются только данные запроса, Spring по-прежнему запрашивает информацию для аутентификации.
Тогда я подумал написать что-то вроде следующего:
public class UserLogin {
/*
@Resource(name = "userDetailsService")
private UserDetailsService userDetailsService;
*/
@Resource(name = "authenticationManager")
private AuthenticationManager authenticationManager;
public boolean login(UserEntity user) {
//UserDetails ud = userDetailsService.loadUserByUsername(username);
Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
for (String role : user.getAuthorities()) {
authorities.add(new GrantedAuthorityImpl(role));
}
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword(), authorities);
try {
Authentication auth = authenticationManager.authenticate(token);
SecurityContext securityContext = new SecurityContextImpl();
// Places in ThredLocal for future retrieval
SecurityContextHolder.setContext(securityContext);
SecurityContextHolder.getContext().setAuthentication(auth);
} catch (AuthenticationException e) {
return false;
}
return true;
}
}
Я иду в правильном направлении. Если это так, как настроить все это .. в Spring-XML.