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

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

[问题描述]

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

  1. http://xxx/ask.action

[解决办法]

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

定义action

  1. package com.litong.jfinal.handler;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. import com.jfinal.handler.Handler;
  10.  
  11. import lombok.extern.slf4j.Slf4j;
  12.  
  13. @Slf4j
  14. public class ActionSuffixHandler extends Handler {
  15.  
  16.   private List<String> suffixList = new ArrayList<>();
  17.  
  18.   public ActionSuffixHandler() {
  19.     suffixList.add(".action");
  20.     suffixList.add(".php");
  21.   }
  22.  
  23.   public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
  24.     log.info("target:{}",target);
  25.     for (String suffix : suffixList) {
  26.       int lastIndexOf = target.lastIndexOf(suffix);
  27.       if (target.lastIndexOf(suffix) > -1) {
  28.         target = target.substring(0, lastIndexOf);
  29.       }
  30.     }
  31.     log.info("target:{}",target);
  32.     next.handle(target, request, response, isHandled);
  33.   }
  34. }

添加action插件

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

controller的代码十分简单

  1. package com.litong.jfinal.controler;
  2.  
  3. import com.jfinal.core.Controller;
  4. import com.jfinal.kit.Kv;
  5.  
  6. /**
  7.  * @author bill robot
  8.  * @date 2020年8月17日_下午5:20:56 
  9.  * @version 1.0 
  10.  * @desc
  11.  */
  12. public class IndexController extends Controller {
  13.   public void index() {
  14.     Kv kv = getKv();
  15.     renderJson(kv);
  16.   }
  17. }


测试请求

  1. 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

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

热门分享

扫码入社