拦截器public class AuthInterceptor implements Interceptor { @SneakyThrows @Override public void intercept(Invocation inv) { Controller controller = inv.getController(); String t = controller.getHeader("Authorization"); if (StringUtils.isBlank(t)) { t = controller.getCookie("Authorization", ""); } if (StringUtils.isBlank(t)) { // 如果Header和Cookie中都没有找到Token,则直接返回错误 controller.renderError(401, new JsonRender(Ret.fail().set("msg", "Token未提供").set("code", 401))); return; } String[] str = t.split("/"); // 提前验证token是否失效 Record r = Db.findFirst("SELECT * FROM PD_USER WHERE TOKEN=?", t); if (null == r) { controller.renderError(401, new JsonRender(Ret.fail().set("msg", "用户信息已失效").set("code", 401))); return; } 路由配置(其中prefi为/api) public void configRoute(Routes me) { me.add(prefix+ "model",ModelController.class); } 跨域配置 public class BaseController extends Controller { public void setCORS(HttpServletResponse response) { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); // 设置过期时间 response.setHeader("Access-Control-Allow-Headers","*" ); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 支持HTTP 1.1. response.setHeader("Pragma", "no-cache"); // 支持HTTP 1.0. response.setHeader("Expires", "0"); } } 控制器(走不进来,postman可用) public class ModelController extends BaseController{ public void importModel() { UploadFile file = getFile("file"); // "file" 是前端上传文件的字段名 if (file == null) { renderJson("status", "error"); return; } // 使用 Hutool 读取 Excel 文件 ExcelReader reader = ExcelUtil.getReader(file.getFile()); List<List<Object>> data = reader.read(); // 读取所有数据 // 将数据转换为 JSON 格式 JSONArray jsonArray = new JSONArray(); for (int i = 1; i < data.size(); i++) { // 从第二行开始(跳过表头) List<Object> row = data.get(i); JSONObject jsonObject = new JSONObject(); // 手动映射字段 jsonObject.put("PN", row.get(0)); // 第一列 -> name jsonObject.put("PN_DESC", row.get(1)); // 第二列 -> age jsonObject.put("MAX_MODEL", row.get(2)); // 第三列 -> city jsonObject.put("MODEL", row.get(2)); jsonArray.add(jsonObject); } // 打印转换后的 JSON 数据 //System.out.println(jsonArray.toJSONString()); // 返回成功响应和 JSON 数据 JSONObject result = new JSONObject(); result.put("status", "success"); result.put("modelList", jsonArray); renderJson(result); try { Record user = UserDao.dao.getUserByToken(getHeader("Authorization")); result.put("OP_ID", user.getStr("OP_ID")); boolean flag = ModelDao.dao.importModel(result); renderJson(flag ? Result.success() : Result.error()); } catch (Exception e) { //记录错误消息到日志 LogKit.error(e.getMessage()); // TODO: handle exception renderJson(Ret.fail().set("code", HttpStatus.ERROR).set("msg", e.getMessage())); } } }
项目:JFinal
https://gitee.com/-/ide/project/jfinal/jfinal/edit/master/-/src/main/java/com/jfinal/ext/cors/CORSInterceptor.java
看上图代码 BaseController 的 setCORS 也不知道是何时调用的。
建议直接使用 JF内置的CORSInterceptor处理,需在 AuthInterceptor 之前。