Jfinal 自定义URL过滤规则

分类: JAVA 评论(0) 125 阅读 2018-03-02 14:05 ZooM查看

摘要 Jfinal 自定义URL过滤规则
JAVA jfinal


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.math.NumberUtils;

import com.jfinal.handler.Handler;
import com.jfinal.render.RenderFactory;

/**
 * 自定义映射路径
 * 
 * @author Administrator
 */
public class UrlRewriteHandler extends Handler {

	@Override
	public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
		String path = target.toLowerCase();
		if (path.startsWith("/blog")) { // 实现 blog/84135/java/456 这样的路径映射
			// RenderFactory.me().getRedirectRender("dohandler").setContext(request,response).render();
			// isHandled[0] = true;
			/*
			 * isHandled变量是为了JFinalFilter决定是否要将本次请求传递给下一个Filter。
			 * 对于Action请求来说, JFinal会全权负责处理 ,所以此时无需传递请求给下一个Filter,
			 * 故在ActionHandle中一旦发现请求为action请求,
			 * 则立即将isHandled置为true 。如果是非Action请求,例如是静态资源请求,
			 * 则交由下一个Filter处理,对于静态资源这是必须的 。
			 * 当然,如果静态请求交由nginx,则Filter中接收不到静态请求
			 */
			int index = path.lastIndexOf("/");
			// suffix文章参数
			String suffix = path.substring(index + 1); 
			if (NumberUtils.isNumber(suffix)) {
			        // 转发到这里面处理
				path = "/doBlogHandler/" + Math.abs(NumberUtils.toInt(suffix));
			} else { // 转发到404页面
				RenderFactory.me().getErrorRender(404).setContext(request, response).render();
				isHandled[0] = true;
				return;
			}
		}
		nextHandler.handle(path, request, response, isHandled);
	}
}

通过拦截URL 将特定格式的URL转发处理 可以将URL伪装为  blog/84135/java/456  类似OSC博客的URL路径

评论0
评论已关闭