我正在使用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