UNPKG

node-web-mvc

Version:
52 lines (51 loc) 2.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const RuntimeAnnotation_1 = __importDefault(require("../annotations/annotation/RuntimeAnnotation")); const PathMatcher_1 = __importDefault(require("../util/PathMatcher")); const DefaultFilterChain_1 = __importDefault(require("./DefaultFilterChain")); const Filter_1 = __importDefault(require("./Filter")); const FilterRegistrationBean_1 = __importDefault(require("./FilterRegistrationBean")); const WebFilter_1 = __importDefault(require("./WebFilter")); class FilterHandlerAdapter { constructor(beanFactory) { var _a; this.registrationBeans = []; this.patchMatcher = new PathMatcher_1.default(); const filters = beanFactory.getBeansOfType(Filter_1.default); for (const filter of filters) { const anno = RuntimeAnnotation_1.default.getClassAnnotation(filter.constructor, WebFilter_1.default); let urlPatterns = (_a = anno === null || anno === void 0 ? void 0 : anno.nativeAnnotation) === null || _a === void 0 ? void 0 : _a.urlPatterns; if (urlPatterns && !(urlPatterns instanceof Array)) { urlPatterns = [urlPatterns].filter(Boolean); } this.addFilter(filter, urlPatterns); } } addFilter(filter, urlPatterns) { const registration = new FilterRegistrationBean_1.default(filter); this.registrationBeans.push(registration); if (urlPatterns) { registration.setUrlPatterns(urlPatterns); // 预构建匹配模式缓存 PathMatcher_1.default.preBuildPattern(urlPatterns); } } matchFilters(request) { const filters = []; const path = request.path; for (const registration of this.registrationBeans) { if (registration.isPatternsEmpty() || this.patchMatcher.matchOne(registration.urlPatterns, path)) { filters.push(registration.filter); } } return filters; } async doFilter(request, response) { const chain = new DefaultFilterChain_1.default(this.matchFilters(request)); return chain.doFilter(request, response); } } exports.default = FilterHandlerAdapter;