单例筛选器中的Spring RequestScope服务错误
我有一个微服务,它接收用户信息作为请求头。 我想将用户信息保存在RequestScoped bean中,以确保为每个请求设置了用户。 因此我写了这个过滤器:单例筛选器中的Spring RequestScope服务错误,spring,spring-boot,Spring,Spring Boot,我有一个微服务,它接收用户信息作为请求头。 我想将用户信息保存在RequestScoped bean中,以确保为每个请求设置了用户。 因此我写了这个过滤器: @Component public class UserSetFilter implements Filter { private final UserService userService; public UserSetFilter(UserService userService) { this.userService
@Component
public class UserSetFilter implements Filter {
private final UserService userService;
public UserSetFilter(UserService userService) {
this.userService = userService;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
final var user = ((HttpServletRequest) servletRequest).getHeader("user");
userService.setUser(user);
chain.doFilter(servletRequest, servletResponse);
}
}
这是我的服务
@Service
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserService {
private String user;
public void setUser(String user) {
this.user = user;
}
public String getUser() {
return user;
}
}
一旦调用我的服务,就会出现异常:
原因:java.lang.IllegalStateException:未找到线程绑定请求:您是指实际web请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上在web请求中操作,并且仍然收到此消息,那么您的代码可能在DispatcherServlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求
我怎样才能解决这个问题?如果不是这样,我如何才能实现我要做的事情?您想通过
RequestScope
实现什么?您是否将您的UserSetFilter
注册到spring中?我想您可能想查找Proxy模式
根据我的理解,请参阅@AshutoshRequestScope是@Scope(value=WebApplicationContext.Scope\u REQUEST,proxyMode=ScopedProxyMode.TARGET\u类)的组合注释
正如您在这里看到的:@ismlydz我使用了RequestScope,它应该将作用域设置为Request,将代理模式设置为TARGET_类。然而,我试图用@scope(value=“Request”,proxyMode=ScopedProxyMode.TARGET_CLASS)替换请求范围
,但仍然是相同的错误您试图从请求范围
实现什么?您是否将您的UserSetFilter
注册到spring中?我想您可能想查找Proxy模式
根据我的理解,请参阅@AshutoshRequestScope是@Scope(value=WebApplicationContext.Scope\u REQUEST,proxyMode=ScopedProxyMode.TARGET\u类)的组合注释
正如您在这里看到的:@ismlydz我使用了RequestScope,它应该将作用域设置为Request,将代理模式设置为TARGET_类。然而,我试图用@scope(value=“Request”,proxyMode=ScopedProxyMode.TARGET\u CLASS)替换请求范围,但仍然是相同的错误