如何正确扩展 WebAuthenticationDetails?

How to properly extend WebAuthenticationDetails?

构建 Spring 引导应用程序,部署(通过在 Tomcat 关闭时复制到 webapps 文件夹)到本地 Tomcat8。总是报错:

未找到线程绑定请求: 您指的是实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求? 如果您实际上是在 Web 请求中操作并且仍然收到此消息,则您的代码可能 运行 在 DispatcherServlet/DispatcherPortlet 之外: 在这种情况下,使用 RequestContextListener 或 RequestContextFilter 暴露当前请求。

据我了解,问题出在使用 WebAuthenticationDetails 扩展实例化 bean 时:

    @Component
    public class AuthDetails extends WebAuthenticationDetails{

        private final AuthTarget authTarget;

        public AuthDetails(HttpServletRequest request) {
            super(request);
            this.authTarget = AuthTarget.valueOf(request.getParameter("target"));
        }

        public AuthTarget getAuthTarget(){
            return this.authTarget;
        }
    }

它不能提供HttpServletRequest来构造bean,但我不知道如何规避。

尝试添加 RequestContextListener,在 xml 中或作为实现(并标记为 @WebListener),没有效果。

没有想法,如何解决。从这里尝试过的例子:https://github.com/Baeldung/spring-security-registration,没有变化 - 在相似的地方出现同样的错误。

非常欢迎任何帮助。

关键很简单:我应该在安全配置中显式定义过滤器 bean extends WebSecurityConfigurerAdapter:

@Bean
AuthFilter authFilter() throws Exception{
    AuthFilter authFilter = new AuthFilter();
    return authFilter;
}

而不是自动装配它。