10

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

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();

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

或者

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

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

我的用户名为空

RequestContextHolder.getRequestAttributes();返回null

我想引用 requestcontext,将其传入,或者让 Spring 执行它的 Magic,以便我可以引用它。

我还在 web.xml 中提供 RequestContextListener

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

我已经搜索了安全论坛,但仍然没有找到任何东西。

提前致谢。

4

2 回答 2

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

于 2013-02-04T12:29:19.733 回答
-3

Use request.getParameter("j_username"); instead of request.getAttribute("j_username");

It works for me. See if it helps you.

于 2014-12-03T07:59:40.573 回答