Spring Security登录:验证输入

我正在寻找一种对登录时的用户凭据执行输入验证的合理方法。具体来说-用户名符合一定的大小限制:如果提供的值太大,请快速失败,而不是将其传递给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)似乎也是一个可能的方向。但是我不确定如何在当前设置中利用这些机制。

有人可以提供一些指导吗?

liweisb 回答:Spring Security登录:验证输入

您需要通过首先注册LocalValidatorFactoryBeanMethodValidationPostProcessor来启用bean验证支持。 (有关详细信息,请参见this)。如果您使用的是spring-boot,则其自动配置应该已经为您配置了它们。

然后,您可以使用@Validated@Size验证方法参数:

@Service
@Validated
public class MyUserDetailsService implements UserDetailsService {

    public UserDetails loadUserByUsername(@Size(max = MAX_USERNAME_LEN) String username) throws UsernameNotFoundException {

    }
}
本文链接:https://www.f2er.com/2895154.html

大家都在问