Аутентифицируйте пользователей с SpringSecurity с помощью WebService, который требует имени пользователя и пароля

если вы еще не отправили свои изменения в git

git reset --soft HEAD~1

Он сбросит все изменения и вернется к одному коммиту обратно

Если это последний сделанный вами коммит и вы хотите чтобы удалить файл из локального и удаленного репозитория, попробуйте это:

git rm <file>
 git commit --amend

или даже лучше:

сбросить сначала

git reset --soft HEAD~1

сбросить ненужный файл

git reset HEAD path/to/unwanted_file

совершить снова

git commit -c ORIG_HEAD  
5
задан casperOne 13 July 2012 в 15:00
поделиться

3 ответа

Расширение org.acegisecurity.providers.dao.AbstractUserDetailsAuthenticationProvider

/**
 * @author rodrigoap
 * 
 */
public class WebServiceUserDetailsAuthenticationProvider extends
    AbstractUserDetailsAuthenticationProvider {

  @Override
  protected UserDetails retrieveUser(String username,
        UsernamePasswordAuthenticationToken authentication)
        throws AuthenticationException {
     //Improve this line:
    String password = authentication.getCredentials().toString();
    // Invoke your webservice here
    GrantedAuthority[] grantedAuth = loginWebService.login(username, password);
    // create UserDetails. Warning: User is deprecated!
    UserDetails userDetails = new User(username, password, grantedAuth);
    return userDetails;
  }

}
6
ответ дан 13 December 2019 в 22:13
поделиться

Я написал в следующий класс:

PncUserDetailsAuthenticationProvider расширяет AbstractUserDetailsAuthenticationProvider

Реализует метод recieveUser:

@Override
protected UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken token) throws AuthenticationException {
    try {
        server = (PncUtilRemote) new InitialContext().lookup("PncUtilBean");
        if (server != null) {
            String password = SHA1(token.getCredentials().toString());
            String[] auth = server.login(username, password);
            if (auth.length > 0) {
                PncUserDetails details = new PncUserDetails(username, password);
                for (int i = 0; i < auth.length; i++) {
                    details.addAuthority(auth[i]);
                }
                return details;
            }
        }
    } catch (Exception e) {
        System.out.println("! " + e.getClass().getName() + " in com.logica.pnc.security.PncUserDetailsAuthenticationProvider.retrieveUser(String, UsernamePasswordAuthenticationToken): " + e.getMessage());
    }
    throw new BadCredentialsException("");
}

Чтобы включить AuthenticationProvider, вам нужно добавить несколько строк в файл application-context.xml:

<bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager">
    <property name="providers">
        <list><ref local="PncAuthenticationProvider" /></list>
    </property>
</bean>

<bean id="PncAuthenticationProvider" class="com.logica.pnc.security.PncUserDetailsAuthenticationProvider">
    <security:custom-authentication-provider />
</bean>

Важно, чтобы вы установили автоконфигурацию на false:

<security:http auto-config="false" />

Спасибо rodrigoap за указание на штуку AuthenticationProvider :)

4
ответ дан 13 December 2019 в 22:13
поделиться

Идея UserDetailsService заключается в том, что ваша реализация предоставляет объект UserDetails, представляющий пользователя с этим именем пользователя, а Spring Security обрабатывает проверку учетных данных.

Если такая конструкция не работает с вашим сервером, потому что вам требуется пароль в качестве параметра, вам, возможно, придется рассмотреть возможность реализации собственного AuthenticationProvider.

0
ответ дан 13 December 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: