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

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.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服务
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) {
// 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
String path = baseApplication.class.getClassLoader().getResource("logo.txt").getPath();
File file = new File(path);
System.out.println(FileUtil.txt2String(file));
//初始化人员主键序列
PkUtil.InitPersonNumPk();
//初始化组织机构主键序列
PkUtil.InitOrgNumPk();
}
}