如何在自定义 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
。
我想引用请求上下文,将其传入,或者让 Spring 发挥其魔力,以便我可以引用它。
我还在我的 web.xml 中提供了 RequestContextListener
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
我已经搜索了安全论坛,但仍然没有找到任何东西。
提前致谢。
我刚刚将侦听器添加到我的 web.xml 中,RequestContextHolder.getRequestAttributes() 返回 RequestAttributes 而不是 null。
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
如果您想自定义登录表单,为什么不扩展此过滤器:org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter
我已经在3.3版本上测试过。
RequestContextFilter
.addFilterBefore(new RequestContextFilter(), myFilter)
RequestContextListener
@Configuration
public class WebConfig {
@Bean
RequestContextListener requestContextListener() {
return new RequestContextListener();
}
}
和上面的答案是一样的方法,不过是用java配置。
使用 request.getParameter("j_username");而不是 request.getAttribute("j_username");
这对我有用。 看看对你有没有帮助。