node-web-mvc
Version:
node spring mvc
52 lines (51 loc) • 2.38 kB
JavaScript
;
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;