You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

207 lines
7.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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.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.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.CommonUtil;
import com.dsideal.base.Util.LogBackLogFactory;
import com.dsideal.base.Util.PkUtil;
import com.jfinal.config.*;
import com.jfinal.kit.Prop;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.hikaricp.HikariCpPlugin;
import com.jfinal.plugin.redis.RedisPlugin;
import com.jfinal.server.undertow.UndertowServer;
import com.jfinal.template.Engine;
import lombok.SneakyThrows;
import java.util.List;
public class BaseApplication extends JFinalConfig {
public static String getEnvPrefix() {
String myEnvVar = System.getenv("WORKING_ENV");
if (myEnvVar == null) {
myEnvVar = "dev";
}
return myEnvVar;
}
public static void main(String[] args) {
System.out.println("当前环境: " + getEnvPrefix());
String configFile = "undertow_{?}.properties".replace("{?}", getEnvPrefix());
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".replace("{?}", getEnvPrefix());
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);
}
@Override
public void configEngine(Engine engine) {
}
@SneakyThrows
@Override
public void configPlugin(Plugins me) {
HikariCpPlugin masterPlugin = new HikariCpPlugin(PropKit.get("mysql.jdbcUrl"), PropKit.get("mysql.user"),
PropKit.get("mysql.password").trim(), PropKit.get("mysql.driverClassName"));
String jdbcUrlSlave = PropKit.get("mysql.jdbcUrlSlave");
if (StrKit.isBlank(jdbcUrlSlave)) jdbcUrlSlave = PropKit.get("mysql.jdbcUrl");
HikariCpPlugin slavePlugin = new HikariCpPlugin(jdbcUrlSlave, PropKit.get("mysql.user"),
PropKit.get("mysql.password").trim(), PropKit.get("mysql.driverClassName"));
me.add(masterPlugin);
me.add(slavePlugin);
// 配置ActiveRecord插件
ActiveRecordPlugin masterArp = new ActiveRecordPlugin("master", masterPlugin);
masterArp.setDialect(new MysqlDialect());
ActiveRecordPlugin slaveArp = new ActiveRecordPlugin("slave", slavePlugin);
slaveArp.setDialect(new MysqlDialect());
//加载所有的sql文件
List<String> list = CommonUtil.getAllSql();
for (String sqlFile : list) {
masterArp.addSqlTemplate(sqlFile);
slaveArp.addSqlTemplate(sqlFile);
}
//加载
me.add(masterArp);
me.add(slaveArp);
// 用于缓存模块的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启动完成后马上执行
*/
@SneakyThrows
@Override
public void onStart() {
//打印 启动Logo
System.out.println(CommonUtil.txt2String("logo.txt"));
//初始化人员主键序列
PkUtil.InitPersonNumPk();
//初始化组织机构主键序列
PkUtil.InitOrgNumPk();
}
}