使用ip地址和用户名密码进行spring安全认证

前端之家收集整理的这篇文章主要介绍了使用ip地址和用户名密码进行spring安全认证前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我使用loadUserByUsername方法来验证用户,但是,我还需要验证允许的IP地址.

但是当我努力的时候

SecurityContextHolder.getContext().getAuthentication(); 

得到null.

请指教,如何在验证用户时访问用户的客户端IP地址.

最佳答案
解决您的问题,您应该实现自定义身份验证提供程序(可以基于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

猜你在找的Spring相关文章