春季安全登录:验证输入

问题描述 投票:0回答:1

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

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

spring-security bean-validation
1个回答
0
投票

您需要通过首先注册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 {

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.