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.

246 lines
9.3 KiB

11 months ago
package com.dsideal.base;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.wall.WallFilter;
import com.dsideal.base.Base.Controller.BaseController;
import com.dsideal.base.Classes.Controller.ClassController;
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.Student.Controller.StudentController;
import com.dsideal.base.StudentYd.Controller.StudentYdController;
import com.dsideal.base.Swagger.controller.SwaggerController;
import com.dsideal.base.Teacher.Controller.TeacherController;
import com.dsideal.base.TeacherYd.Controller.TeacherYdController;
import com.dsideal.base.Test.Controller.TestController;
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.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.druid.DruidStatViewHandler;
import com.jfinal.plugin.druid.IDruidStatViewAuth;
import com.jfinal.plugin.redis.RedisPlugin;
import com.jfinal.server.undertow.UndertowServer;
import com.jfinal.template.Engine;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
public class baseApplication extends JFinalConfig {
public static void main(String[] args) {
UndertowServer.create(baseApplication.class, "undertow.properties").start();
}
/**
*
*/
@Override
public void configConstant(Constants me) {
//使用LogBack
me.setLogFactory(new LogBackLogFactory());
// 加载少量必要配置随后可用PropKit.get(...)获取值
PropKit.use("application.properties");
//配置统一的错误页面
me.setError404View("/html/common/404/index.html");
}
/**
*
*/
@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("/test", TestController.class);
// 配置Swagger UI访问路由
// http://127.0.0.1:9000/FengHuang/swagger/index
me.add("/swagger", SwaggerController.class, "swagger");
}
@Override
public void configEngine(Engine engine) {
}
/**
*
*/
@Override
public void configPlugin(Plugins me) {
DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"),
PropKit.get("password").trim(), PropKit.get("driverClassName"));
//最大连接池数量默认为8
druidPlugin.setMaxActive(20);
//最小连接池数量
druidPlugin.setMinIdle(1);
//初始化时建立物理连接的个数默认为0
druidPlugin.setInitialSize(1);
//获取连接时最大等待时间单位毫秒。配置了maxWait之后缺省启用公平锁并发效率会有所下降如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
druidPlugin.setMaxWait(60000);
//如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
druidPlugin.setTimeBetweenEvictionRunsMillis(60000);
//连接保持空闲而不被驱逐的最小时间
druidPlugin.setMinEvictableIdleTimeMillis(300000);
//建议配置为true不影响性能并且保证安全性。申请连接的时候检测如果空闲时间大于timeBetweenEvictionRunsMillis执行validationQuery检测连接是否有效。
druidPlugin.setTestWhileIdle(true);
//申请连接时执行validationQuery检测连接是否有效做了这个配置会降低性能。默认为true
druidPlugin.setTestOnBorrow(false);
//归还连接时执行validationQuery检测连接是否有效做了这个配置会降低性能。默认为true
druidPlugin.setTestOnReturn(false);
//数据监控
druidPlugin.addFilter(new StatFilter());
//sql防注入
WallFilter wall = new WallFilter();
wall.setDbType("mysql");
druidPlugin.addFilter(wall);
me.add(druidPlugin);
// 配置ActiveRecord插件
ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
//遍历sql目录下所有的sql文件
File sqlDir;
String basePath = baseApplication.class.getClassLoader().getResource(".").getPath();
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());
}
}
//加载
me.add(arp);
// 用于缓存模块的redis服务
11 months ago
RedisPlugin redis = new RedisPlugin("Redis", PropKit.get("redis_ip"), PropKit.getInt("redis_port"), 10 * 1000,PropKit.get("redis_password"));
11 months ago
//启动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) {
// me.add(new SsoHandler());
//加入统一的XSS处理器
//添加xss 过滤(正则表达式:"/((\\%3C)|<)((\\%2F)|\\/)*[a-z0-9\\%]+((\\%3E)|>)/ix"
me.add(new XssHandler("/((\\%3C)|<)((\\%2F)|\\/)*[a-z0-9\\%]+((\\%3E)|>)/ix"));
DruidStatViewHandler dsvh = new DruidStatViewHandler("/druid", new IDruidStatViewAuth() {
public boolean isPermitted(HttpServletRequest request) {
//配置权限
Cookie[] cookies = request.getCookies();
if (cookies == null) {
return false;
}
for (int i = 0; i < cookies.length; i++) {
Cookie c = cookies[i];
if (c.getName().equalsIgnoreCase("person_id")) {
if (c.getValue().equals("16380C30-B1EA-4BFF-B5E6-4F3928CE36F3")) { //sys1
return true;
}
}
}
//此处权限自查,由实际情况而定
return false;
}
});
me.add(dsvh);
}
/**
* jfinal
*/
@Override
public void onStart() {
//打印 启动Logo
11 months ago
String path = baseApplication.class.getClassLoader().getResource("logo.txt").getPath();
11 months ago
File file = new File(path);
System.out.println(FileUtil.txt2String(file));
//初始化人员主键序列
PkUtil.InitPersonNumPk();
//初始化组织机构主键序列
PkUtil.InitOrgNumPk();
}
}