我正在使用Jersey 1.4 ea和Spring 3.0以及jersey-spring
集成。集成泽西岛和Spring对here描述的资源类别适用。 我怎么想要在ContainerRequestFilter中注入一个弹簧组件来做一些预处理请求。Jersey:将Spring组件注入ContainerRequestFilter
@Component
public class SecurityFilter implements ContainerRequestFilter {
// UserManager is a declared spring component
// Injecting it should work somehow
@Autowired
private UserManager userManager;
@Override
public ContainerRequest filter(ContainerRequest request) {
System.out.println(userManager);
// prints out null on request
}
}
将应用程序部署到Glassfish时,过滤器和用户管理器bean都已注册。我想知道我做错了什么。有没有办法将Spring管理bean注入到ContainerRequestFilter中?
UPDATE
类的解决。问题是,如果这些bean是Java代理(与生成的代理类相对),Jersey不会获得Spring bean。通过指定Spring总是使用代理类而不是Java代理,可以通过在弹簧配置的相应部分中指定proxy-target-class="true"
属性来解决问题。在我的场景中,我必须在<tx:annotation-driven proxy-target-class="true" />
上指定它。
请参阅here了解更详细的分析和可能的解决方法。
在你的解决方案中,SecurityFilter是如何在web.xml文件或其他地方注册的?我在这里有一个问题https://stackoverflow.com/q/45509183/4636715其中ContainerRequestFilter根本没有被访问。 – vahdet 2017-08-08 08:51:59