【发布时间】:2015-05-16 01:55:12
【问题描述】:
我的项目中有自定义重定向过滤器,它们从数据库加载定义的规则,并处理重定向。
除此之外,我还使用 UrlRewriteFilter ,并在 urlrewrite.xml 中定义了一些规则。
现在我想完全切换到使用 tukey 的过滤器,但是我想从我的数据库中加载规则,而不是在 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,因为它找不到规则链(可能是我需要以某种方式初始化规则链?)。
我假设我错过了要覆盖的内容,或者我的初始化错误。有没有人有这方面的经验?是否有可能实现正确的行为?
感谢任何帮助。
【问题讨论】:
标签: java url-rewriting servlet-filters tuckey-urlrewrite-filter