package com.dsideal.FengHuang; import com.alibaba.druid.filter.stat.StatFilter; import com.alibaba.druid.wall.WallFilter; import com.dsideal.FengHuang.Base.Controller.BaseController; import com.dsideal.FengHuang.Classes.Controller.ClassController; import com.dsideal.FengHuang.Dm.Controller.DmController; import com.dsideal.FengHuang.Global.Controller.GlobalController; import com.dsideal.FengHuang.Handler.XssHandler; import com.dsideal.FengHuang.Index.Controller.IndexController; import com.dsideal.FengHuang.Interceptor.*; import com.dsideal.FengHuang.LoginPerson.Controller.LoginPersonController; import com.dsideal.FengHuang.Menu.Controller.MenuController; import com.dsideal.FengHuang.Organization.Controller.OrganizationController; import com.dsideal.FengHuang.Student.Controller.StudentController; import com.dsideal.FengHuang.StudentYd.Controller.StudentYdController; import com.dsideal.FengHuang.Teacher.Controller.TeacherController; import com.dsideal.FengHuang.TeacherYd.Controller.TeacherYdController; import com.dsideal.FengHuang.Util.FileUtil; import com.dsideal.FengHuang.Util.LogBackLogFactory; import com.dsideal.FengHuang.Util.PkUtil; import com.dsideal.FengHuang.Yp.Controller.YpController; 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 Start extends JFinalConfig { public static void main(String[] args) { UndertowServer.create(Start.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"); //上传图片大小 <=30MB me.setMaxPostSize(31457280); } /** * 配置路由 */ @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("/yp", YpController.class); } @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 = Start.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("myRedis", PropKit.get("redis_ip"), PropKit.getInt("redis_port"), 10 * 1000); //启动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")); 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 = Start.class.getClassLoader().getResource("dsideal.txt").getPath(); File file = new File(path); System.out.println(FileUtil.txt2String(file)); //初始化人员主键序列 PkUtil.InitPersonNumPk(); //初始化组织机构主键序列 PkUtil.InitOrgNumPk(); } }