spring - Spring Boot 中的过滤器初始化
问题描述
我对 Spring 很陌生,我想将一些旧的 Spring 4 项目迁移到 Spring Boot 2.X。我正面临过滤器初始化的问题。在目前的方法中,我有这样的事情:
public class MyWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() { return new Class[]{ Configuration1.class, Configuration2.class, Configuration3.class};}
@Override
protected Class<?>[] getServletConfigClasses() { return null; }
@Override
@NonNull
protected String[] getServletMappings() { return new String[]{"/"}; }
@Override
public void onStartup(final ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
//MY FILTERS
FilterRegistration.Dynamic corsFilter = servletContext.addFilter("corsFilter", DelegatingFilterProxy.class);
corsFilter.addMappingForUrlPatterns(null, false, "/*");
corsFilter.setAsyncSupported(true);
//.... more filters there
}
据我了解,这样做是因为 bean 初始化发生在onStartup
方法之后(虽然不确定,如果我错了,请纠正我)。
将应用程序迁移到 Spring Boot 时,onStartup()
我将过滤器初始化逻辑复制粘贴到类。ServletContextInitializer
不幸的是,我现在在尝试访问调度程序并进一步转发请求时遇到了这样的问题:
public final class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//some logic
String servlet = filterConfig.getInitParameter("servlet");
RequestDispatcher rd = servletContext.getNamedDispatcher(servlet); // null pointer here :(
rd.forward(new RESTPathServletRequest((HttpServletRequest) request), response);
}
我的问题如下:
- 在 Spring Boot 中使用过滤器的正确方法是什么?
- 为什么
onStartup
in 和 in有ServletContextInitializer
不同的流程(看起来 bean 很早就被初始化了)onStartup
AbstractAnnotationConfigDispatcherServletInitializer
- 有什么方法可以模拟我的本地跑步者的
AbstractAnnotationConfigDispatcherServletInitializer
逻辑。ServletContextInitializer
解决方案
推荐阅读
- java - Spring JPA 用 Oher 列连接两个表
- javascript - 错误“0: 'Open' is not defined”和“SCRIPT1005: SCRIPT1005: Expected '('” 如何修复这些错误?
- r - 根据指定列中的最小值从数据框中获取 X 行;并在平局中随机选择
- octave - Octave 是否支持 Live 脚本或其格式 (.mlx) 文件?
- ruby - 当我不知道使用哪个程序安装 Ruby 时如何升级 Ruby 版本?
- c++ - std::cin 从控制台获取两种不同的变量类型并“存储”第二种类型供以后使用?
- react-native - 使用带有钩子的本机反应,如何获得选择器值?
- reactjs - 如何创建固定位置的表格页脚?
- postgresql - kafka-connect 错误:无法获取有效的复制槽
- javascript - How to access css class with React?