小编典典

在Filter bean类中使用一些bean?

spring

在我的filter bean类中,我添加了一些bean依赖关系(带有@Autowired注释)。但是在该方法中doFilter(),我所有的依赖项bean都为null。

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)…

你可以帮帮我吗 ?

实际上,我不在服务器端(Spring)上使用MVC概念。对于我的副客户端,我使用Flex技术,并且BlazeDS servlet吨与服务器通信。

因此,这就是原因,我使用了Filter bean的概念。

因此,如何在Filter bean中处理会话bean的概念?

Skaffman,

我实现了你的想法,因此我使用以下命令更新了application.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时,永远不会调用此方法handleRequestInternal


阅读 400

收藏
2020-04-21

共1个答案

小编典典

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

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

我发现了一种更有效的方法:

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