Spring Security-检索用户IP,浏览器信息和请求的页面

我们使用RequestHeaderAuthenticationFilteras来实现预身份验证策略,并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

回到顶部