在 Spring 中,过滤器(Filter)通常用于在请求到达 Servlet 之前或响应返回给客户端之前,对请求或响应进行预处理或后处理
要在 Spring Filter 中获取路径变量,你需要将 Filter 与 Spring MVC 的控制器(Controller)结合起来。这里有一个简单的例子来说明如何实现这个功能:
@Controller
public class MyController {
@GetMapping("/hello/{name}")
public String hello(@PathVariable("name") String name, Model model) {
model.addAttribute("name", name);
return "hello";
}
}
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String pathInfo = httpRequest.getPathInfo();
// 获取路径变量
String[] pathParts = pathInfo.split("/");
String name = pathParts[pathParts.length - 1];
// 将路径变量存储在请求属性中,以便在控制器中使用
httpRequest.setAttribute("name", name);
// 继续处理请求
chain.doFilter(request, response);
}
// 其他方法...
}
@Configuration
public class AppConfig {
@Bean
public FilterRegistrationBean<MyFilter> myFilter() {
FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new MyFilter());
registrationBean.addUrlPatterns("/hello/*");
return registrationBean;
}
}
现在,当请求到达 /hello/{name}
路径时,过滤器会先获取路径变量 {name}
,并将其存储在请求属性中。随后,控制器可以从请求属性中获取该路径变量,并将其添加到模型中。
领取专属 10元无门槛券
手把手带您无忧上云