jfinal-4.2 自定hanlder, 拦截url中的指定后缀

jfinal-4.2 自定hanlder, 拦截url中的指定后缀

[问题描述]

有1个请求是这个样子的,默认jfinal的contrler是不能处理的,因为url中有后缀名,如何将这个请求交个jfinal的contrller处理

http://xxx/ask.action

[解决办法]

定义一个handler将uri中的.actoion删除,获取不包含action的url,向后传递,传递到ActionHanlder,ActionHanlder会交给conroller处理

定义action

package com.litong.jfinal.handler;

import java.util.ArrayList;
import java.util.List;

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

import com.jfinal.handler.Handler;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ActionSuffixHandler extends Handler {

  private List<String> suffixList = new ArrayList<>();

  public ActionSuffixHandler() {
    suffixList.add(".action");
    suffixList.add(".php");
  }

  public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
    log.info("target:{}",target);
    for (String suffix : suffixList) {
      int lastIndexOf = target.lastIndexOf(suffix);
      if (target.lastIndexOf(suffix) > -1) {
        target = target.substring(0, lastIndexOf);
      }
    }
    log.info("target:{}",target);
    next.handle(target, request, response, isHandled);
  }
}

添加action插件

  @Override
  public void configHandler(Handlers me) {
    me.add(new ActionSuffixHandler());
  }

controller的代码十分简单

package com.litong.jfinal.controler;

import com.jfinal.core.Controller;
import com.jfinal.kit.Kv;

/**
 * @author bill robot
 * @date 2020年8月17日_下午5:20:56 
 * @version 1.0 
 * @desc
 */
public class IndexController extends Controller {
  public void index() {
    Kv kv = getKv();
    renderJson(kv);
  }
}


测试请求

http://192.168.0.10:11023/jfinal-4.2-web/index.php?s=/api/order/cart&delivery=20&shop_id=0&coupon_id=0&is_use_points=0&cart_ids=10156_0%2C10155_0%2C10154_0%2C10153_0&wxapp_id=10001&token=e591daec48cad2358dcbe8592bc9e23e

测试结果如下

image.png

完成


评论区

JFinal

2020-08-17 17:47

建议升级到 jfinal 最新版本,超爽

李通

2020-08-17 18:43

@JFinal 切换完成,Jfinal的核心十分优秀,但是相应的拓展没有一个统一的极简的标准,
比如整合登录没有统一的的标准,整合OOS没有统一的标准等等,每个程序的实现都不一样,这样就导致新手在学习整合其他组件的时候有些困难,
解决问题的办法有很多种,只要掌握比较优秀的一种就可以了,毕竟人生苦短
推荐看一个jfinal整合java-ee周边组件的专栏,规范jfinal其他组件的整合

李通

2020-08-17 18:44

@JFinal打错字了 每个程序 改为 每个程序员

JFinal

2020-08-18 11:08

@李通 主要还是资源、时间不够,只能先保项目主体,周边就靠大家了

热门分享

扫码入社