我正在寻找一种对登录时的用户凭据执行输入验证的合理方法。具体来说-用户名符合一定的大小限制:如果提供的值太大,请快速失败,而不是将其传递给userDetailsService
。
某种粗略的解决方案是在userDetailsService
的门口显式测试此条件:
@Service
public class MyUserDetailsService implements UserDetailsService {
public UserDetails loadUserByusername(String username) throws usernameNotFoundException {
if (username.length() > MAX_username_LEN )
throw new BadCredentialsException("username too long");
//...
}
}
从域模型的角度来看,大小限制可以表示为用户实体上的验证约束(@Size(max = ...)
)。由于用户名是请求参数,因此请求验证(@Valid
)似乎也是一个可能的方向。但是我不确定如何在当前设置中利用这些机制。
有人可以提供一些指导吗?