Получите ответ 401 при использовании настройки аутентификации с приложением - PullRequest
0 голосов
/ 29 декабря 2018

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

Аутентификация: обычная аутентификация
Кодировщик пароля: BCryptPasswordEncoder
База данных: локальнаяMongodb

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private PasswordEncoder encoder;

@Autowired
private UserService userService;

@Override
public void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
            .authorizeRequests().antMatchers("/config", "/registerUser").permitAll()
            .and()
            .authorizeRequests().antMatchers("/**").authenticated().and().httpBasic()
            .and().logout().logoutSuccessUrl("/").permitAll()


    ;
}

    @Override
    protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
//authentication will work if I switch to the in-memory authentication below
//        authManagerBuilder
//                .inMemoryAuthentication()
//                .withUser("user").password(encoder.encode("password")).roles("USER");

    authManagerBuilder.authenticationProvider(authProvider());
}

@Bean
public DaoAuthenticationProvider authProvider() {
    DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
    authProvider.setUserDetailsService(userService);
    authProvider.setPasswordEncoder(this.encoder);
    return authProvider;
}

}



@Service
public class UserService implements IUserService {

    @Autowired
    private UserDetailRepository userDetailRepository;

    @Autowired
    private PasswordEncoder encoder;

    @Override
    public User saveUser(User user) {
        String password = user.getPassword();
        String passwordHased = this.encoder.encode(password);
        user.setPassword(passwordHased);
        User ud = this.userDetailRepository.save(user);
        return ud;
    }

    @Override
    public User getUserWithId(String userId) {
        return this.userDetailRepository.findById(userId).get();
    }

    @Override
    public User loadUserByUsername(String s) throws UsernameNotFoundException {
        return this.userDetailRepository.findByUsername(s);
    }
}



public class User implements UserDetails {
    @Id
    private String userId;

    private String username;

    private String password;


    @Override
    public final Collection<? extends GrantedAuthority> getAuthorities() {
        List<String> privileges = new ArrayList<>();
        privileges.add("READ");
        privileges.add("WRITE");
        return getGrantedAuthorities(privileges);
    }
    private final List<GrantedAuthority> getGrantedAuthorities(final List<String> privileges) {
        final List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
        for (final String privilege : privileges) {
            authorities.add(new SimpleGrantedAuthority(privilege));
        }
        return authorities;
    }


... (other overridden methods omitted)

}

Я подозреваю, что мой метод getAuthorities () работает неправильно.
Пожалуйста, дайте мне знать, если вам нужно больше информации

1 Ответ

0 голосов
/ 29 декабря 2018

Я отвечаю на свой вопрос.

В коде, который я выложил выше, нет ничего плохого, кроме того, что я пропустил.В моем классе User, который расширяет UserDetails, есть несколько методов, необходимых для переопределения.

  @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

Теперь все они установлены, возвращают true, и это работает, ранее все они возвращали false ..

глупая ошибка.

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