首页 > 解决方案 > Spring Authentication,如何为坏凭证自定义responeText

问题描述

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"}

相反,我想要特定的错误:“用户未激活。 ”或“未找到用户

我怎样才能达到这个结果?

标签: javaspringauthentication

解决方案


正如在这篇博文中看到的,您必须配置一个 MessageSource Bean。您可以配置此 bean 以根据需要提供消息。常见的方法是拥有一个包含消息的属性文件。

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

请关注博客文章配置错误消息以更深入地了解该主题


推荐阅读