首页>代码>JFinal-layui极速开发企业应用系统-专业版>/Jfinal-layui/src/main/java/com/qinhailin/common/config/MainConfig.java
/**
* Copyright 2019-2021 覃海林(qinhaisenlin@163.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.qinhailin.common.config;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.wall.WallFilter;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.template.Engine;
import com.jfinal.template.source.ClassPathSourceFactory;
import com.qinhailin.common.directive.MyNowDirective;
import com.qinhailin.common.filter.MyDruidFilter;
import com.qinhailin.common.handler.CommonHandler;
import com.qinhailin.common.intercepor.ExceptionInterceptor;
import com.qinhailin.common.intercepor.LoggerInterceptor;
import com.qinhailin.common.intercepor.SessionInterceptor;
import com.qinhailin.common.intercepor.TokenInterceptor;
import com.qinhailin.common.kit.DruidKit;
import com.qinhailin.common.kit.IdKit;
import com.qinhailin.common.model._MappingKit;
import com.qinhailin.common.safe.XssHandler;
import com.jfinal.ext.handler.UrlSkipHandler;
import com.jfinal.ext.interceptor.SessionInViewInterceptor;
import com.jfinal.json.FastJsonFactory;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.ehcache.EhCachePlugin;
import com.jfinal.server.undertow.UndertowServer;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.activerecord.dialect.OracleDialect;
public class MainConfig extends JFinalConfig {
/**
*运行main方法启动项目
*/
public static void main(String[] args) {
// 加载配置文件
loadConfig();
// 启动ureport2报表插件
if(p.getBoolean("startUreport2",false)){
UndertowServer.create(MainConfig.class)
.configWeb( builder -> {
// 配置 UReport2 Servlet
builder.addServlet("ureportServlet", "com.bstek.ureport.console.UReportServlet");
builder.addServletMapping("ureportServlet", "/ureport/*");
// 配置 Listener
builder.addListener("org.springframework.web.context.ContextLoaderListener");
})
.start();
}else{
UndertowServer.start(MainConfig.class);
}
}
// 使用 jfinal-undertow 时此处仅保留声明,不能有加载代码
private static Prop p;
// 先加载开发环境配置,再追加生产环境的少量配置覆盖掉开发环境配置
static void loadConfig() {
if (p == null) {
p = PropKit.use("config-dev.txt").appendIfExists("config-pro.txt");
}
}
/**
* 配置JFinal常量
*/
@Override
public void configConstant(Constants me) {
//加载配置文件
loadConfig();
// 设置当前是否为开发模式
me.setDevMode(p.getBoolean("devMode"));
// 设置默认上传文件保存路径 getFile等使用
me.setBaseUploadPath(WebContant.baseUploadPath);
// 设置默认下载文件路径 renderFile使用
me.setBaseDownloadPath(WebContant.baseDownloadPath);
// 设置error渲染视图
me.setError403View(WebContant.error403View);
me.setError404View(WebContant.error404View);
me.setError500View(WebContant.error500View);
//
me.setJsonFactory(FastJsonFactory.me());
//开启依赖注入
me.setInjectDependency(true);
//附件上传大小设置100M
me.setMaxPostSize(WebContant.maxPostSize);
}
/**
* 配置JFinal路由映射
*/
@Override
public void configRoute(Routes me) {
me.scan(WebContant.scanPackageName);
me.setBaseViewPath(WebContant.baseViewPath);
}
/**
* 获取数据库插件
* 抽取成独立的方法,便于重用该方法,减少代码冗余
*/
public static DruidPlugin createDruidPlugin() {
loadConfig();
return new DruidPlugin(p.get("jdbcUrl"), p.get("user"), p.get("password").trim());
}
/**
* 配置JFinal插件 数据库连接池 ORM 缓存等插件 自定义插件
*/
@Override
public void configPlugin(Plugins me) {
// 配置数据库连接池插件
DruidPlugin dbPlugin = createDruidPlugin();
/** 配置druid监控 **/
dbPlugin.addFilter(new StatFilter());
WallFilter wall = new WallFilter();
wall.setDbType(p.get("dbType"));
dbPlugin.addFilter(wall);
// orm映射 配置ActiveRecord插件
ActiveRecordPlugin arp=new ActiveRecordPlugin(dbPlugin);
//sql模板
arp.getEngine().setSourceFactory(new ClassPathSourceFactory());
arp.addSqlTemplate(WebContant.sqlTemplate);
// 代码器模板
arp.addSqlTemplate(WebContant.codeTemplate);
//处理SQL参数
dbPlugin.addFilter(new MyDruidFilter());
if("oracle".equals(p.get("dbType"))){
// 配置属性名(字段名)大小写,true:小写,false:大写,统一小写,切换oracle数据库的时候可以不用改页面字段
arp.setContainerFactory(new CaseInsensitiveContainerFactory(true));
arp.setDialect(new OracleDialect());
}else {
arp.setDialect(new MysqlDialect());
}
/******** 在此添加数据库 表-Model 映射 *********/
_MappingKit.mapping(arp);
// 添加到插件列表中
me.add(dbPlugin);
me.add(arp);
/******** 多数据源配置,接入第三方库进行登录或者业务开发 *********/
// oracleDb(me);
// 配置缓存插件
me.add(new EhCachePlugin());
}
/**
* oracle 数据源
* @param me
*/
public void oracleDb(Plugins me){
DruidPlugin dbPluginOracle = new DruidPlugin(p.get("oracle.jdbcUrl"), p.get("oracle.user"), p.get("oracle.password").trim());
me.add(dbPluginOracle);
dbPluginOracle.addFilter(new StatFilter());
WallFilter wallOracle = new WallFilter();
wallOracle.setDbType(p.get("oracle.dbType"));
dbPluginOracle.addFilter(wallOracle);
// oracle ActiveRecrodPlugin 实例,并指定configName为 oracle
ActiveRecordPlugin arpOracle = new ActiveRecordPlugin("oracle", dbPluginOracle);
arpOracle.setDialect(new OracleDialect());
me.add(arpOracle);
}
/**
* 配置全局拦截器
*/
@Override
public void configInterceptor(Interceptors me) {
me.addGlobalActionInterceptor(new SessionInViewInterceptor());
me.addGlobalActionInterceptor(new SessionInterceptor());
me.addGlobalActionInterceptor(new ExceptionInterceptor());
me.addGlobalActionInterceptor(new TokenInterceptor());
me.addGlobalActionInterceptor(new LoggerInterceptor());
}
/**
* 配置全局处理器
*/
@Override
public void configHandler(Handlers me) {
/** 配置druid监控 **/
me.add(DruidKit.getDruidStatViewHandler());
// 路由处理
me.add(new CommonHandler());
// XSS过滤
me.add(new XssHandler("^\\/portal/form/view.*"));
// 放开/ureport/开头的请求
me.add(new UrlSkipHandler("^\\/ureport.*", true));
}
/**
* 配置模板引擎
*/
@Override
public void configEngine(Engine me) {
// 这里只有选择JFinal TPL的时候才用
me.setDevMode(p.getBoolean("engineDevMode"));
// 当前时间指令
me.addDirective("now", MyNowDirective.class);
// 项目根路径
me.addSharedObject("path", JFinal.me().getContextPath());
// 项目名称
me.addSharedObject("projectName", p.get("projectName"));
// 项目版权
me.addSharedObject("copyright", p.get("copyright"));
// 配置共享函数模板
me.addSharedFunction(WebContant.functionTemp);
// 附件在线预览服务
me.addSharedObject("onlinePreview", p.getBoolean("onlinePreview"));
me.addSharedObject("onlinePreviewUrl", p.get("onlinePreviewUrl"));
//允许上传文件类型
me.addSharedObject("allowUploadFile", WebContant.allowUploadFile);
//用于前端调用静态方法,创建id
me.addSharedStaticMethod(IdKit.class);
}
}
最近下载更多
z875152686 LV8
2023年11月2日
2602275348 LV12
2022年4月8日
zcl02036716 LV17
2022年2月28日
微量的记忆 LV10
2022年2月11日
最代码官方 LV168
2021年10月5日
最近浏览更多
Frank_F
2024年7月5日
暂无贡献等级
myfz0662 LV10
2024年5月8日
云破月 LV8
2024年4月12日
akittyboy LV9
2024年3月31日
z875152686 LV8
2023年11月2日
abc562311934 LV4
2022年10月8日
1986王志飞 LV6
2022年8月12日
bluesky2016 LV15
2022年6月10日
a318888331 LV13
2022年4月11日
2602275348 LV12
2022年3月31日

