【发布时间】:2019-10-10 10:15:42
【问题描述】:
我有一个 Spring Boot 应用程序,它使用 x509 身份验证进一步验证用户是否符合数据库。当用户访问站点时,内部 Spring 代码调用 loadUserByUsername 方法,该方法反过来进行数据库调用。这一切都发生在控制器意识到发生任何事情之前。如果找不到用户,它会抛出 EntityNotFoundException 并在用户的浏览器上显示堆栈跟踪。
我正在使用 Spring Boot Starter。控制器具有捕获异常并返回“未授权”消息的代码,但这发生在很久以前。有没有其他人看到过这个,你有解决方法吗?
@Service
public class UserService implements UserDetailsService {
public UserDetails loadUserByUsername(String dn) {
ApprovedUser details = auService.getOne(dn);
if (details == null){
String message = "User not authorized: " + dn;
throw new UsernameNotFoundException(message);
}
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
if (details.isAdminUser()){
authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN_USER"));
}
return new AppUser(dn, "", authorities);
}
【问题讨论】: