我在Tomcat上部署了Spring应用程序,
我要添加一个OncePerRequestFilter
@Component
public class MyFilter extends OncePerRequestFilter {
private String id;
private static final Logger logger = Logger.getLogger(MyFilter.class);
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
logger.debug("Filter id: " + id);
特定网址
FilterRegistration myFilter = servletContext.addFilter("myFilter ", MyFilter.class);
myFilter.addMappingForUrlPatterns(null, false, "/myservlet/myendpoint/*");
myFilter.addMappingForUrlPatterns(null, false, "/myservlet/myendpoint2/*");
myFilter.addMappingForUrlPatterns(null, false, "/myservlet/myendpoint3/*");
我希望使用相同的类对不同的URL映射使用不同的行为,因此我需要发送参数(例如String),该参数将在Filter类中可用并执行不同的检查,这可以使用当前配置来完成吗?
我尝试添加init parameter,但在过滤器中ID为null
myFilter.setInitParameter("id", "1");
答案 0 :(得分:1)
我可以想到2种选择:
选项1 : 基本上,您需要覆盖 public void initFilterBean() 并设置Bean属性
选项2 :MyFilter组件是Spring完全管理的bean,因此另一种设置id属性的方法是将其用作 属性(为您的my-filter.id指定一个属性值 应用程序属性文件,要使其正常工作,您需要获取 Spring中对myFilter实例的引用 ApplicationContext容器):
@Value("my-filter.id")
private String id;