在自定义AuthenticationProvider中访问HttpServletRequest

时间:2012-07-05 16:15:30

标签: spring-mvc spring-security

如何在自定义AuthenticationProvider中访问HttpServletRequest。我试过这个

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();

HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
String username = (String) httpReq.getAttribute("j_username");

OR

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
HttpServletRequest httpReq = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();

String username = (String) httpReq.getAttribute("j_username");

我的用户名为null

但是RequestContextHolder.getRequestAttributes();返回null。

我想引用requestcontext,传入它,或让Spring做它的魔术,所以我可以引用它。

我也在我的web.xml中提供RequestContextListener

  <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>

我搜索了安全论坛,但还没找到任何内容。

提前致谢。

2 个答案:

答案 0 :(得分:9)

我刚刚将侦听器添加到我的web.xml中,而RequestContextHolder.getRequestAttributes()返回RequestAttributes而不是null。

<listener>
  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

如果您想自定义登录表单,为什么不扩展此过滤器:org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter

答案 1 :(得分:-3)

使用request.getParameter(&#34; j_username&#34;);而不是request.getAttribute(&#34; j_username&#34;);

它对我有用。看看它是否对你有帮助。