在我的filter bean类中,我添加了一些bean依赖关系(带有@Autowired注释)。但是在该方法中doFilter(),我所有的依赖项bean都为null。
@Autowired
doFilter()
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
我遇到了同样的问题,我的第一个想法是手动强制Spring将@Autowired注释应用于此处建议的过滤器
但是我不喜欢在Java类中对bean名称进行硬编码的想法。
我发现了一种更有效的方法:
public void init(FilterConfig filterConfig) throws ServletException { SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, filterConfig.getServletContext()); }