Spring Security-检索用户IP,浏览器信息和请求的页面
我们使用RequestHeaderAuthenticationFilter
as来实现预身份验证策略,并PreAuthenticatedAuthenticationProvider
用作身份验证提供者。要求之一是使用以下信息将所有成功的登录名存储到数据库中。由于用户IP地址和其他与请求相关的信息在UserDetailsService
类中不可用,因此检索此信息并将其存储在db中的最佳策略是什么?
回答:
所有信息均可通过访问HttpServletRequest
。您可以通过以下方式获取它:
依赖注入
最简单的方法是将servlet请求直接注入您的UserDetailsService:
类中:
public MyDetailsService implements UserDetailsService { @Autowired
private HttpServletRequest request;
//...
}
(由OP建议) 请记住将以下侦听器添加到您的web.xml
:
<listener> <listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
更新:之所以HttpServletRequest
可行,是因为Spring注入了特殊范围的代理实现,因此您可以从singleton-
scoped访问请求范围的请求“ bean”
MyDetailsService
。在幕后,每次调用时都会调用request
参数org.springframework.web.context.request.RequestContextHolder#requestAttributesHolder
ThreadLocal
,您也可以直接访问这些参数。如您所见,Spring在范围规则方面非常灵活。它只是工作。
RequestContextHolder
另一种方法是使用RequestContextHolder
:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.
currentRequestAttributes()).
getRequest();
以上是 Spring Security-检索用户IP,浏览器信息和请求的页面 的全部内容, 来源链接: utcz.com/qa/397657.html