В моем проекте есть настраиваемые фильтры перенаправления, которые загружают определенные правила из базы данных и обрабатывают перенаправления.
В дополнение к ним я также использую UrlRewriteFilter с некоторыми правилами, определенными в urlrewrite.xml
.
Теперь я хочу полностью переключиться на использование фильтра tuckey, однако я хочу загружать правила из своей базы данных, а не определять их в xml (чтобы у меня было одно место для хранения правил перенаправления).
Моя идея состоит в том, чтобы расширить UrlRewriteFilter и вместо инициализации правил из файлов XML загружать мои правила из базы данных.
Вот что у меня есть до сих пор,
@Service
public class CustomUrlRewriteFilter extends UrlRewriteFilter {
@Autowired
private RedirectService redirectService;
private UrlRewriter urlRewriter;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
super.init(filterConfig);
}
@Override
protected UrlRewriter getUrlRewriter(ServletRequest request, ServletResponse response, FilterChain chain) {
return urlRewriter;
}
@PostConstruct
public void initUrlRewriter() {
List<Redirect> redirects = redirectService.retrieveAll();
Conf conf = new Conf();
for (Redirect redirect : redirects) {
NormalRule rule = new NormalRule();
rule.setMatchType(redirect.getMatchType());
rule.setToType(redirect.getRedirectType());
rule.setFrom(redirect.getPath());
rule.setTo(redirect.getTarget());
rule.setQueryStringAppend("true");
conf.addRule(rule);
}
conf.setUseQueryString(true);
urlRewriter = new UrlRewriter(conf);
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,
ServletException {
super.doFilter(req, resp, chain);
}
}
Проблема в том, что перенаправление не происходит, я не получаю никаких исключений. При отладке я вижу, что когда запрос на обработку возвращает false, так как не может найти цепочку правил (может быть, мне нужно как-то инициировать цепочку правил?).
Я предполагаю, что я что-то пропустил, чтобы переопределить, или моя инициализация неверна. У кого-нибудь есть опыт в этом? Можно ли вообще добиться правильного поведения?
Любая помощь приветствуется.