Безопасность Spring 3.0 - авторизация с аутентификацией - PullRequest
6 голосов
/ 11 августа 2011

Я новичок в Spring, и мое требование состоит в том, чтобы я не хотел аутентифицировать пользователя с помощью имени пользователя и пароля. Пользователь аутентифицируется в каком-то другом приложении, и мое приложение получает запрос со следующими данными:

  1. Имя пользователя
  2. Роли

Я просто хочу использовать 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.

1 Ответ

8 голосов
/ 14 августа 2011

Вы находитесь в том, что называется сценарием предварительной аутентификации, где вы настраиваете Spring Security только для авторизации доступа, а не для аутентификации доступа.См. http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html. Вот полная конфигурация, в которой вам нужно реализовать AbstractPreAuthenticatedProcessingFilter для grep вашей схемы аутентификации UserPrincipal и пользовательской UserDetailsService, которую вы упомянули выше.1009 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...