java - 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"}
相反,我想要特定的错误:“用户未激活。 ”或“未找到用户”
我怎样才能达到这个结果?
解决方案
正如在这篇博文中看到的,您必须配置一个 MessageSource Bean。您可以配置此 bean 以根据需要提供消息。常见的方法是拥有一个包含消息的属性文件。
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.addBasenames("classpath:org/springframework/security/messages");
return messageSource;
}
请关注博客文章配置错误消息以更深入地了解该主题
推荐阅读
- java - 如何在没有重复数据的情况下在 Apache Pulsar 中进行集群切换
- dialogflow-es - Dialogflow Fulfillment:将多项选择题分解为单个问题
- angular - Angular 2+ Primeng + 下拉菜单 + 反应式表单
- php - 如何在codeigniter中获得3个单独列的总和
- r - 如何使用 R 更改选择集中的选择值?
- javascript - 如何在没有无限事件的情况下在两个滑块之间切换?
- go - Cond for 循环说明
- java - 带有扩展类型的 Java Lambda 函数
- mt4 - mt4 + ibarshift 给出不一致的结果
- linux - 如何在 CLI 中将每一行转换为变量?