当前位置: 首页 > 面试题库 >

如何在servlet过滤器中获取Spring bean?

刘元青
2023-03-14
问题内容

我定义了一个,javax.servlet.Filter并且具有带有Spring注释的Java类。

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;

@Configuration
public class SocialConfig {

    // ...

    @Bean
    public UsersConnectionRepository usersConnectionRepository() {
        // ...
    }
}

我想将Bean UsersConnectionRepository放入我的Filter,因此尝试了以下操作:

public void init(FilterConfig filterConfig) throws ServletException {
    UsersConnectionRepository bean = (UsersConnectionRepository) filterConfig.getServletContext().getAttribute("#{connectionFactoryLocator}");
}

但是它总是返回null。我怎样才能得到一个Spring beanFilter


问题答案:

尝试:

UsersConnectionRepository bean = 
  (UsersConnectionRepository)WebApplicationContextUtils.
    getRequiredWebApplicationContext(filterConfig.getServletContext()).
    getBean("usersConnectionRepository");

usersConnectionRepository你的bean在应用程序上下文中的名称/标识在哪里。甚至更好:

UsersConnectionRepository bean = WebApplicationContextUtils.
  getRequiredWebApplicationContext(filterConfig.getServletContext()).
  getBean(UsersConnectionRepository.class);

还可以看看GenericFilterBean及其子类。



 类似资料:
  • (对不起我的英语,我说法语) 在我正在编写的过滤器中,我需要知道用户询问的servlet的名称。它将允许我检查 servlet 是否与我的数据库条目匹配。事实上,我正在编写一个限制过滤器。这是它的工作原理: 用户尝试获取链接到userListe Servlet的URL /users/liste 第一个过滤器(SimpleConnexion)检查用户对象是否在http会话中定义(=用户是否连接?)。

  • 问题内容: 这是我的模样 我试图在线查找有关如何从请求中获取价值的信息。 我什么也没找到,所以我尝试枚举,并且一无所知,但是没有任何标题。 问题 如何获得来自请求的所有标头? 问题答案: 类型转换成(仅当是一个 )。 然后可以使用和方法。 像这样:

  • 假设我已经定义了这些RESTendpoint: 我定义了两个过滤器(日志记录和授权),在这些过滤器中,我想获得与当前请求匹配的url模式。使用上述示例: 如果请求是一个GET到 /variables,我需要"/变量" 如果请求是一个GET到 /variables/myfancyname,我需要"/变量/{name}" 如果请求是一个PUT到 /variables/myfancyname/myval

  • 问题内容: 我正在尝试找到一种方法,可将请求从过滤器重定向到登录页面,但我不知道如何从servlet重定向。我搜索了,但发现的是方法。我在过滤器的响应对象上找不到此方法。是什么原因 我该如何解决? 问题答案: 在Filter中,响应是而不是。因此将强制转换为。 如果使用上下文路径: 也不要忘记在最后打电话。

  • 我试图将CORS过滤器添加到SpringWeb应用程序中,但该过滤器未被执行。我在这里遵循了相关步骤:https://spring.io/guides/gs/rest-service-cors/无济于事。我没有用Spring靴。我正在3.0 servlet规范容器中使用Spring的WebApplicationInitializer引导我的应用程序。 我的应用程序中的其他一切都在工作:配置类、控制

  • 我正在处理一个安全过滤器,它需要根据path变量的值做一些检查。我试着这样做: 但映射始终为空,因此我的筛选器的优先级似乎高于在请求中填充属性的。 我已尝试添加以下配置: 这没有帮助,筛选器是在调用之前执行的。 在我的安全过滤器中,我获取Auth头,解密它,从中获取并将它与路径var值进行比较。如果这些ID不匹配,我返回403。 我想知道是否有可能覆盖这两个动作的顺序。或者,也许,有其他的方法来检