构建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;
}
}
它不能提供HttpServletRequest用于bean的构造,但是我不知道如何逃避它。
试图以XML或实现方式(并标记为@WebListener)添加RequestContextListener,但无效。
没有想法,如何解决它。从这里尝试过示例:https://github.com/Baeldung/spring-security-registration,没有更改-在相似的地方有相同的错误。
非常欢迎任何帮助。
答案 0 :(得分:0)
关键很简单:我应该在扩展WebSecurityConfigurerAdapter的安全配置中显式定义过滤器bean:
@Bean
AuthFilter authFilter() throws Exception{
AuthFilter authFilter = new AuthFilter();
return authFilter;
}
代替自动装配。