【问题标题】:How to properly extend WebAuthenticationDetails?如何正确扩展 WebAuthenticationDetails?
【发布时间】:2019-04-16 19:21:16
【问题描述】:

构建 Spring Boot 应用程序,部署(通过在 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;
        }
    }

它无法为bean的构造提供HttpServletRequest,但我不知道如何规避它。

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

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

非常欢迎任何帮助。

【问题讨论】:

  • 已修复,稍后会发布修复

标签: java spring-security tomcat8


【解决方案1】:

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

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

而不是自动装配它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多