package com.dsideal.base; import com.dsideal.base.Base.Controller.BaseController; import com.dsideal.base.Classes.Controller.ClassController; import com.dsideal.base.DataAuthority.Controller.DataAuthorityController; import com.dsideal.base.DataEase.Controller.DataEaseController; import com.dsideal.base.Dm.Controller.DmController; import com.dsideal.base.Global.Controller.GlobalController; import com.dsideal.base.Handler.XssHandler; import com.dsideal.base.Index.Controller.IndexController; import com.dsideal.base.Interceptor.*; import com.dsideal.base.LoginPerson.Controller.LoginPersonController; import com.dsideal.base.Menu.Controller.MenuController; import com.dsideal.base.Organization.Controller.OrganizationController; import com.dsideal.base.Plugin.YamlProp; import com.dsideal.base.Res.Controller.ResourceController; import com.dsideal.base.Student.Controller.StudentController; import com.dsideal.base.StudentYd.Controller.StudentYdController; import com.dsideal.base.Teacher.Controller.TeacherController; import com.dsideal.base.TeacherYd.Controller.TeacherYdController; import com.dsideal.base.Tools.Controller.excelConvertController; import com.dsideal.base.Util.FileUtil; import com.dsideal.base.Util.LogBackLogFactory; import com.dsideal.base.Util.PkUtil; import com.jfinal.config.*; import com.jfinal.kit.PathKit; import com.jfinal.kit.Prop; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.OrderedFieldContainerFactory; import com.jfinal.plugin.activerecord.dialect.MysqlDialect; import com.jfinal.plugin.druid.DruidPlugin; import com.jfinal.plugin.redis.RedisPlugin; import com.jfinal.server.undertow.UndertowServer; import com.jfinal.template.Engine; import java.io.File; public class BaseApplication extends JFinalConfig { public static void main(String[] args) { String configFile = "undertow.properties"; UndertowServer.create(BaseApplication.class, configFile).start(); } /** * 配置常量 */ public static Prop PropKit; @Override public void configConstant(Constants me) { //使用LogBack me.setLogFactory(new LogBackLogFactory()); //加载配置文件 String configFile = "application.yaml"; PropKit = new YamlProp(configFile); // 设置静态根目录为上传根目录 me.setBaseUploadPath(PropKit.get("uploadTempPath")); } /** * 配置路由 */ @Override public void configRoute(Routes me) { //默认页面 me.add("/", IndexController.class); //登录表 me.add("/loginPerson", LoginPersonController.class); //全局变量 me.add("/global", GlobalController.class); //数据字典 me.add("/dm", DmController.class); //基础数据 me.add("/base", BaseController.class); //组织机构 me.add("/organization", OrganizationController.class); //班级 me.add("/class", ClassController.class); //教师 me.add("/teacher", TeacherController.class); //教师异动 me.add("/teacherYd", TeacherYdController.class); //学生 me.add("/student", StudentController.class); //学生异动 me.add("/studentYd", StudentYdController.class); //菜单管理 me.add("/menu", MenuController.class); //数据权限 me.add("/dataAuthority", DataAuthorityController.class); //excel格式变更 me.add("/excelConvert", excelConvertController.class); //DataEase me.add("/dataease", DataEaseController.class); //资源管理 me.add("/res", ResourceController.class); } @Override public void configEngine(Engine engine) { } /** * 配置插件 */ @Override public void configPlugin(Plugins me) { DruidPlugin plugin = new DruidPlugin(PropKit.get("mysql.jdbcUrl"), PropKit.get("mysql.user"), PropKit.get("mysql.password").trim(), PropKit.get("mysql.driverClassName")); me.add(plugin); DruidPlugin dataEasePlugin = new DruidPlugin(PropKit.get("mysql.jdbcUrl").replace("ds_db", "dataease"), PropKit.get("mysql.user"), PropKit.get("mysql.password").trim(), PropKit.get("mysql.driverClassName")); me.add(dataEasePlugin); // 配置ActiveRecord插件 ActiveRecordPlugin arp = new ActiveRecordPlugin(plugin); arp.setDialect(new MysqlDialect()); //保证数据列返回与SQL语句中的顺序是一致的 arp.setContainerFactory(new OrderedFieldContainerFactory()); ActiveRecordPlugin dataEaseArp = new ActiveRecordPlugin("dataease", dataEasePlugin); dataEaseArp.setDialect(new MysqlDialect()); //保证数据列返回与SQL语句中的顺序是一致的 dataEaseArp.setContainerFactory(new OrderedFieldContainerFactory()); //遍历sql目录下所有的sql文件 File sqlDir; String basePath = PropKit.get("rootPath"); // 创建File对象 File directory = new File(basePath); if (!directory.exists()) { basePath = PathKit.getRootClassPath(); } sqlDir = new File(basePath + "/Sql"); File[] sqlFiles = sqlDir.listFiles(); for (File sqlFile : sqlFiles != null ? sqlFiles : new File[0]) { //只加载.sql文件 if (sqlFile.getName().indexOf(".sql") > 0) { arp.addSqlTemplate("/Sql/" + sqlFile.getName()); dataEaseArp.addSqlTemplate("/Sql/" + sqlFile.getName()); } } //加载 me.add(arp); me.add(dataEaseArp); // 用于缓存模块的redis服务 RedisPlugin redis = new RedisPlugin("Redis", PropKit.get("redis.ip"), PropKit.getInt("redis.port"), 10 * 1000, PropKit.get("redis.password")); //启动redis组件 me.add(redis); } /** * 配置全局拦截器 */ @Override public void configInterceptor(Interceptors me) { //检查是不是登录了 me.add(new IsLoginInterceptor()); //注册参数数字检查器 me.add(new IsNumbericInterceptor()); //注册非空拦截器 me.add(new EmptyInterceptor()); //注册layui的分页检查器 me.add(new LayUiPageInfoInterceptor()); //注册Ids检查是不是数字的检查器 me.add(new CheckIdsInterceptor()); //注册一个GUID号的检查器 me.add(new IsGuidInterceptor()); //是不是具备操作组织机构的权限 me.add(new AuthorityInterceptor()); //检查是不是系统管理员 me.add(new IsSysAdminInterceptor()); //注册一个检查身份证号的拦截 me.add(new VerifyIDCardInterceptor()); //检查手机号是否正确和是否存在 me.add(new VerifyTelephoneInterceptor()); //检查邮箱是否正确和是否存在 me.add(new VerifyEmailInterceptor()); //注册一个检查输入文本长度的拦截器 me.add(new LengthInterceptor()); } /** * 配置处理器 */ @Override public void configHandler(Handlers me) { //加入统一的XSS处理器 //添加xss 过滤(正则表达式:"/((\\%3C)|<)((\\%2F)|\\/)*[a-z0-9\\%]+((\\%3E)|>)/ix") me.add(new XssHandler("/((\\%3C)|<)((\\%2F)|\\/)*[a-z0-9\\%]+((\\%3E)|>)/ix")); } /** * 在jfinal启动完成后马上执行 */ @Override public void onStart() { //打印 启动Logo String path = BaseApplication.class.getClassLoader().getResource("logo.txt").getPath(); File file = new File(path); System.out.println(FileUtil.txt2String(file)); //初始化人员主键序列 PkUtil.InitPersonNumPk(); //初始化组织机构主键序列 PkUtil.InitOrgNumPk(); } }