在过滤豆类中使用一些豆子?

2022-09-02 11:16:11

在我的过滤器bean类中,我添加了一些bean依赖项(带有注释)。但是在方法中,我所有的依赖关系豆都有空...@AutowireddoFilter()

public class FacebookOAuth implements Filter
{
@Autowired
private BusinessLogger logger;

@Autowired
private IUserSessionInfo userSessionInfo;

@Autowired
private FacebookOAuthHelper oAuthHelper;

public void init(FilterConfig fc) throws ServletException
{
    // Nothing to do
}

public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc) throws   IOException, ServletException
{
    // HttpServletRequest req = (HttpServletRequest)sr;
    HttpServletResponse res = (HttpServletResponse) sr1;

    String code = sr.getParameter("code");

    if (StringUtil.isNotBlankStr(code))
    {
        String authURL = this.oAuthHelper.getAuthURL(code);

this.oAuthHelper 在 null 处相等(和其他依赖项 bean to)...

你能帮我吗?


事实上,我没有在服务器端(Spring)上使用MVC概念。对于我的客户端,我使用Flex技术和BlazeDS servlet ton与我的服务器进行通信。

所以,这就是原因,我使用过滤器豆的概念。

那么,我该如何处理我的过滤器豆中的会话豆概念?


斯卡夫曼,

我实现了你的想法,所以我更新了我的应用程序.xml:

<bean id="FacebookOAuthHandler" class="com.xx.FacebookOAuthHandler" />
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
    <props>
       <prop key="/fbauth">FacebookOAuthHandler</prop>         
    </props>
   </property>
</bean>

和我的FacebookOAuthHandler类:

public class FacebookOAuthHandler extends AbstractController
{
@Autowired
private BusinessLogger logger;

@Autowired
private IUserSessionInfo userSessionInfo;

@Autowired
private FacebookOAuthHelper oAuthHelper;

@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    // TODO

    return null;
}

但是,当我的URL为:http://xx.xx.xx.xx/MyApp/fbauth


答案 1

我遇到了同样的问题,我的第一个想法是手动强制Spring将@Autowired注释应用于过滤器,就像这里建议的那样

http://forum.springsource.org/showthread.php?60983-Autowiring-the-servlet-filter

但是我不喜欢在我的Java类中对bean名称进行硬编码的想法。

我找到了一种更干净的工作方式:

public void init(FilterConfig filterConfig) throws ServletException {
    SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
            filterConfig.getServletContext());
}

答案 2

假设这是在你的 中连接的,那么这是行不通的,因为它不是由 Spring 管理的,而是由 servlet 容器管理的。因此,像自动布线这样的事情是行不通的。Filterweb.xml

如果要将 servlet 过滤器定义为 Spring bean,则需要在 web 应用程序的根应用程序上下文中定义它(使用 in web.xml),然后定义一个 DelegatingFilterProxy,该属性委托给 Spring 管理的 Bean 来完成这项工作。ContextLoaderListener

但是,你真的需要一个servlet过滤器吗?据我所知,Facebook身份验证的东西,这可以通过Spring HandlerInterceptor轻松完成。与委派筛选器相比,这将大大减少配置工作。


推荐