Spring Authentication, как настроить responeText для неверных учетных данных - PullRequest
0 голосов
/ 04 декабря 2018

Mu служба аутентификации

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException, ResourceNotFoundException {

        Optional<User> optionalUser = userRepository.findByUsername(s);

        if (optionalUser.isPresent()) {

            User user = optionalUser.get();
            if (!user.isActive()) {
                throw new UsernameNotFoundException("User is not active.");
            }

            List<SimpleGrantedAuthority> grantedAuthorities = new ArrayList<>();
            grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_USER"));

            if (user.isKeyUser()) grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_KEYUSER"));
            if (user.isAdmin()) grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));

            UserDetails userDetails = new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), grantedAuthorities);
            return userDetails;
        }
        else {
            throw new UsernameNotFoundException("User not found");
        }

    }
}

Но когда я пытаюсь выполнить вход с неверными учетными данными или пользователь не активен, я получаю эту общую ошибку (я использую React + Axios):

data: {error: "invalid_grant", error_description: "Bad credentials"}

Вместо этого я хотел бы получить конкретную ошибку: " Пользователь не активен. " или " Пользователь не найден "

Как мне достичь этого результата?

Ответы [ 2 ]

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

Как видно из этого поста в блоге, вам необходимо настроить компонент MessageSource.Этот бин вы можете настроить для предоставления сообщений, как вам нравится.Обычный подход заключается в том, чтобы иметь файлы свойств, содержащие сообщения.

 @Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.addBasenames("classpath:org/springframework/security/messages");
    return messageSource;
}

Пожалуйста, следуйте сообщению в блоге Настроить сообщение об ошибке , чтобы глубже изучить тему

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

Вы можете переопределить свойство сообщения в spring-security-core.jar. Для этого создайте файл свойств сообщения, добавьте пару ключей и значений этого,

AbstractUserDetailsAuthenticationProvider.badCredentials= Неверное имя пользователя или пароль

, а затем

просто добавьте следующий код в конфигурацию xml

<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
        <value>mymessages</value>
        </list>
    </property>
  </bean>

Таким образом, вы можете переопределить несколько свойств по умолчанию для пружины-framework

Для получения дополнительной информации вы можете обратиться на следующий сайт:

https://www.mkyong.com/spring-security/display-custom-error-message-in-spring-security/

или

Пользовательское сообщение Spring AuthenticationException, исключение

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