我在我的項目中有自定義重定向過濾器,它們正在從數據庫加載定義的規則,並處理重定向。自定義過濾器擴展UrlRewriteFilter從數據庫中加載規則
除此之外,我還使用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);
}
}
的問題是,重定向沒有發生,我沒有得到任何的異常。當我調試時,我可以看到當processing request它返回false,因爲它找不到規則鏈(是否需要以某種方式初始化規則鏈?)。
我假設我錯過了一些重寫,或者我的初始化是錯誤的。有沒有人有這方面的經驗?是否有可能實現適當的行爲?
任何幫助表示讚賞。