我使用loadUserByUsername方法来验证用户,但是,我还需要验证允许的IP地址.
但是当我努力的时候
SecurityContextHolder.getContext().getAuthentication();
得到null.
最佳答案
要解决您的问题,您应该实现自定义身份验证提供程序(可以基于DaoAuthenticationProvider或可以从头开始实现,等等).此身份验证提供程序应在Authentication Manager提供程序集中注册.此外,此提供程序将具有与上下文http请求相关的自动装配的HttpServletRequest类型属性.然后,当您通过该提供程序执行客户端身份验证时,可以通过调用HttpServletRequest.getRemoteAddr()来获取用户IP地址.
码:
码:
/**
* IP address based authentication provider
*/
@Service
public class IPAddressBasedAuthenticationProvider extends AuthenticationProvider {
/**
* Context http request
*/
@Autowired
private HttpServletRequest request;
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String ipAddress = request.getRemoteAddr();
//do authentication specific stuff (accessing users table in database,etc.)
//return created authentication object (if user provided valid credentials)
}
}
组态:
此外,您可以添加其他身份验证提供程序(如果需要).
希望这可以帮助.
链接:AuthenticationProvider
ProviderManager