├── .gitignore ├── .settings └── org.eclipse.jst.j2ee.ejb.annotations.xdoclet.prefs ├── LICENSE ├── README.md ├── README2.md ├── doc └── springbootv2.sql ├── mvnw ├── mvnw.cmd ├── pom.xml └── src └── main ├── java └── com │ └── fc │ ├── V2Application.java │ ├── V2WebInitializer.java │ └── v2 │ ├── common │ ├── base │ │ ├── BaseController.java │ │ ├── BaseService.java │ │ └── PageInfo.java │ ├── conf │ │ ├── FileConfig.java │ │ ├── Knife4jConfiguration.java │ │ ├── MybatisConfig.java │ │ ├── PageHelperConf.java │ │ ├── PutFilter.java │ │ ├── V2Config.java │ │ ├── oss │ │ │ ├── OssAspect.java │ │ │ ├── OssAutoConfiguration.java │ │ │ ├── OssConfig.java │ │ │ ├── OssEndpoint.java │ │ │ ├── OssProperties.java │ │ │ └── OssTemplate.java │ │ ├── redis │ │ │ ├── FastJson2JsonRedisSerializer.java │ │ │ ├── RedisConfig.java │ │ │ └── RedisService.java │ │ └── xss │ │ │ ├── SimpleCORSFilter.java │ │ │ ├── XssFilterAtuoConfig.java │ │ │ ├── XssHttpServletRequestWrapper.java │ │ │ ├── XssStringJsonDeserializer.java │ │ │ └── XssUtil.java │ ├── dataSources │ │ ├── DataSource.java │ │ ├── DataSourceAspect.java │ │ ├── DataSourceContextHolder.java │ │ ├── DataSourceType.java │ │ └── DynamicDataSource.java │ ├── domain │ │ ├── AjaxResult.java │ │ ├── ResuTree.java │ │ └── ResultTable.java │ ├── druid │ │ └── RemoveDruidAdConfig.java │ ├── exception │ │ ├── GlobalExceptionResolver.java │ │ ├── demo │ │ │ └── DemoModeException.java │ │ └── file │ │ │ ├── FileNameLengthLimitExceededException.java │ │ │ └── InvalidExtensionException.java │ ├── file │ │ └── FileUtils.java │ ├── interceptor │ │ ├── MyInterceptor.java │ │ └── MyWebAppConfigurer.java │ ├── log │ │ ├── Log.java │ │ └── LogAspect.java │ ├── quartz │ │ ├── AbstractQuartzJob.java │ │ ├── QuartzConfig.java │ │ ├── QuartzDisallowConcurrentExecution.java │ │ ├── QuartzJobExecution.java │ │ ├── QuartzSchedulerUtil.java │ │ ├── ScheduleConstants.java │ │ ├── task │ │ │ └── V2Task.java │ │ └── utils │ │ │ └── JobInvokeUtil.java │ ├── spring │ │ └── SpringUtils.java │ └── support │ │ └── ConvertUtil.java │ ├── controller │ ├── AdminController.java │ ├── IndexController.java │ └── admin │ │ ├── AutoCodeController.java │ │ ├── CaptchaController.java │ │ ├── DictDataController.java │ │ ├── DictTypeController.java │ │ ├── EmailController.java │ │ ├── FileController.java │ │ ├── LogController.java │ │ ├── PermissionController.java │ │ ├── ProvinceLinkageController.java │ │ ├── QuartzJobController.java │ │ ├── QuartzJobLogController.java │ │ ├── RoleController.java │ │ ├── ServiceController.java │ │ ├── SysAreaController.java │ │ ├── SysCityController.java │ │ ├── SysDepartmentController.java │ │ ├── SysInterUrlController.java │ │ ├── SysNoticeController.java │ │ ├── SysPositionController.java │ │ ├── SysProvinceController.java │ │ ├── SysStreetController.java │ │ ├── UserController.java │ │ └── app │ │ └── ApiController.java │ ├── mapper │ ├── auto │ │ ├── GeneratorMapper.java │ │ ├── SysAreaMapper.java │ │ ├── SysCityMapper.java │ │ ├── SysDepartmentMapper.java │ │ ├── SysFileMapper.java │ │ ├── SysInterUrlMapper.java │ │ ├── SysNoticeMapper.java │ │ ├── SysNoticeUserMapper.java │ │ ├── SysPositionMapper.java │ │ ├── SysProvinceMapper.java │ │ ├── SysQuartzJobLogMapper.java │ │ ├── SysQuartzJobMapper.java │ │ ├── SysStreetMapper.java │ │ ├── TSysDictDataMapper.java │ │ ├── TSysDictTypeMapper.java │ │ ├── TSysEmailMapper.java │ │ ├── TSysRoleUserMapper.java │ │ ├── TsysOperLogMapper.java │ │ ├── TsysPermissionMapper.java │ │ ├── TsysPermissionRoleMapper.java │ │ ├── TsysRoleMapper.java │ │ └── TsysUserMapper.java │ └── custom │ │ ├── PermissionDao.java │ │ ├── RoleDao.java │ │ ├── SysUtilDao.java │ │ └── TsysUserDao.java │ ├── model │ ├── auto │ │ ├── SysArea.java │ │ ├── SysAreaExample.java │ │ ├── SysCity.java │ │ ├── SysCityExample.java │ │ ├── SysDepartment.java │ │ ├── SysDepartmentExample.java │ │ ├── SysFile.java │ │ ├── SysFileExample.java │ │ ├── SysInterUrl.java │ │ ├── SysInterUrlExample.java │ │ ├── SysNotice.java │ │ ├── SysNoticeExample.java │ │ ├── SysNoticeUser.java │ │ ├── SysNoticeUserExample.java │ │ ├── SysPosition.java │ │ ├── SysPositionExample.java │ │ ├── SysProvince.java │ │ ├── SysProvinceExample.java │ │ ├── SysQuartzJob.java │ │ ├── SysQuartzJobExample.java │ │ ├── SysQuartzJobLog.java │ │ ├── SysQuartzJobLogExample.java │ │ ├── SysStreet.java │ │ ├── SysStreetExample.java │ │ ├── TSysDictData.java │ │ ├── TSysDictDataExample.java │ │ ├── TSysDictType.java │ │ ├── TSysDictTypeExample.java │ │ ├── TSysEmail.java │ │ ├── TSysEmailExample.java │ │ ├── TSysRoleUser.java │ │ ├── TSysRoleUserExample.java │ │ ├── TsysOperLog.java │ │ ├── TsysOperLogExample.java │ │ ├── TsysPermission.java │ │ ├── TsysPermissionExample.java │ │ ├── TsysPermissionRole.java │ │ ├── TsysPermissionRoleExample.java │ │ ├── TsysRole.java │ │ ├── TsysRoleExample.java │ │ ├── TsysUser.java │ │ └── TsysUserExample.java │ └── custom │ │ ├── ColumnEntity.java │ │ ├── GenVo.java │ │ ├── Msg.java │ │ ├── PermissionTreeModelVo.java │ │ ├── PublicMsg.java │ │ ├── RoleVo.java │ │ ├── SQLAdapter.java │ │ ├── Service.java │ │ ├── SysMenu.java │ │ ├── SysPower.java │ │ ├── TableEntity.java │ │ ├── Tablepar.java │ │ ├── TsysTables.java │ │ ├── TsysTablesVo.java │ │ ├── Ueditor.java │ │ ├── autocode │ │ ├── AutoCodeConfig.java │ │ ├── AutoConfigModel.java │ │ ├── AutoDictType.java │ │ ├── BeanColumn.java │ │ └── TableInfo.java │ │ └── email │ │ ├── MailSenderInfo.java │ │ └── MyAuthenticator.java │ ├── satoken │ ├── SaTokenConfigure.java │ ├── SaTokenUtil.java │ ├── StpInterfaceImpl.java │ └── dialect │ │ ├── SaTokenDialect.java │ │ └── SaTokenTagProcessor.java │ ├── service │ ├── DictService.java │ ├── GeneratorService.java │ ├── SysAreaService.java │ ├── SysCityService.java │ ├── SysDepartmentService.java │ ├── SysDictDataService.java │ ├── SysDictTypeService.java │ ├── SysFileService.java │ ├── SysInterUrlService.java │ ├── SysNoticeService.java │ ├── SysNoticeUserService.java │ ├── SysOperLogService.java │ ├── SysPermissionService.java │ ├── SysPositionService.java │ ├── SysProvinceService.java │ ├── SysQuartzJobLogService.java │ ├── SysQuartzJobService.java │ ├── SysRoleService.java │ ├── SysStreetService.java │ ├── SysUserService.java │ ├── SysUtilService.java │ └── TSysEmailService.java │ └── util │ ├── AutoCode │ └── AutoCodeUtil.java │ ├── BeanUtils.java │ ├── DateUtils.java │ ├── MD5Util.java │ ├── ServletUtils.java │ ├── SimpleEmailUtil.java │ ├── SnowflakeIdWorker.java │ └── StringUtils.java └── resources ├── application-dev.yml ├── application-prod.yml ├── application.yml ├── auto_code ├── auto_code_config.properties ├── controller │ └── EntityController.java.vm ├── html │ ├── add.html.vm │ ├── edit.html.vm │ └── list.html.vm ├── mapper │ └── EntityMapper.java.vm ├── mapperxml │ └── EntityMapper.xml.vm ├── model │ ├── Entity.java.vm │ └── EntityExample.java.vm ├── service │ └── EntityService.java.vm ├── sql │ └── menu.sql.vm └── 说明.txt.vm ├── banner.txt ├── generator └── MyBatisGenerator │ ├── 1.bat │ ├── generator.xml │ ├── mybatis-generator-core-1.3.2.jar │ ├── mybatis-generator-core-1.3.7.jar │ └── mysqldriver.jar ├── logback.xml ├── mybatis-generator.xml ├── mybatis ├── auto │ ├── SysAreaMapper.xml │ ├── SysCityMapper.xml │ ├── SysDepartmentMapper.xml │ ├── SysInterUrlMapper.xml │ ├── SysNoticeMapper.xml │ ├── SysNoticeUserMapper.xml │ ├── SysPositionMapper.xml │ ├── SysProvinceMapper.xml │ ├── SysQuartzJobLogMapper.xml │ ├── SysQuartzJobMapper.xml │ ├── SysStreetMapper.xml │ ├── TSysDictDataMapper.xml │ ├── TSysDictTypeMapper.xml │ ├── TSysEmailMapper.xml │ ├── TSysRoleUserMapper.xml │ ├── TsysOperLogMapper.xml │ ├── TsysPermissionRoleMapper.xml │ ├── TsysPremissionMapper.xml │ ├── TsysRoleMapper.xml │ ├── TsysUserMapper.xml │ └── sysFileMapper.xml └── custom │ ├── GeneratorMapper.xml │ ├── SysUtilMapper.xml │ ├── TsysPremissionMapper.xml │ ├── TsysRoleMapper.xml │ └── TsysUserMapper.xml ├── static ├── admin │ ├── css │ │ ├── admin.css │ │ ├── load.css │ │ └── other │ │ │ ├── center.css │ │ │ ├── console1.css │ │ │ ├── console2.css │ │ │ ├── department.css │ │ │ ├── error.css │ │ │ ├── generate.css │ │ │ ├── generator.css │ │ │ ├── icon.css │ │ │ ├── login.css │ │ │ ├── person.css │ │ │ ├── result.css │ │ │ └── user.css │ ├── images │ │ ├── 403.svg │ │ ├── 404.svg │ │ ├── 500.svg │ │ ├── act.jpg │ │ ├── avatar.jpg │ │ ├── login.svg │ │ ├── logo.png │ │ └── notice.png │ └── js │ │ ├── headImg.js │ │ └── jquery.min.js ├── component │ ├── code │ │ ├── css │ │ │ └── style.css │ │ └── index.html │ ├── highlight │ │ ├── highlight.pack.js │ │ └── styles │ │ │ ├── brown-papersq.png │ │ │ ├── pojoaque.jpg │ │ │ ├── purebasic.css │ │ │ ├── school-book.png │ │ │ ├── vs.css │ │ │ ├── vs2015.css │ │ │ ├── xcode.css │ │ │ ├── xt256.css │ │ │ └── zenburn.css │ ├── jquery.min.js │ ├── layui │ │ ├── css │ │ │ ├── layui.css │ │ │ ├── layui.mobile.css │ │ │ └── modules │ │ │ │ ├── code.css │ │ │ │ ├── laydate │ │ │ │ └── default │ │ │ │ │ └── laydate.css │ │ │ │ └── layer │ │ │ │ └── default │ │ │ │ ├── icon-ext.png │ │ │ │ ├── icon.png │ │ │ │ ├── layer.css │ │ │ │ ├── loading-0.gif │ │ │ │ ├── loading-1.gif │ │ │ │ └── loading-2.gif │ │ ├── font │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.svg │ │ │ ├── iconfont.ttf │ │ │ ├── iconfont.woff │ │ │ └── iconfont.woff2 │ │ ├── images │ │ │ └── face │ │ │ │ ├── 0.gif │ │ │ │ ├── 1.gif │ │ │ │ ├── 10.gif │ │ │ │ ├── 11.gif │ │ │ │ ├── 12.gif │ │ │ │ ├── 13.gif │ │ │ │ ├── 14.gif │ │ │ │ ├── 15.gif │ │ │ │ ├── 16.gif │ │ │ │ ├── 17.gif │ │ │ │ ├── 18.gif │ │ │ │ ├── 19.gif │ │ │ │ ├── 2.gif │ │ │ │ ├── 20.gif │ │ │ │ ├── 21.gif │ │ │ │ ├── 22.gif │ │ │ │ ├── 23.gif │ │ │ │ ├── 24.gif │ │ │ │ ├── 25.gif │ │ │ │ ├── 26.gif │ │ │ │ ├── 27.gif │ │ │ │ ├── 28.gif │ │ │ │ ├── 29.gif │ │ │ │ ├── 3.gif │ │ │ │ ├── 30.gif │ │ │ │ ├── 31.gif │ │ │ │ ├── 32.gif │ │ │ │ ├── 33.gif │ │ │ │ ├── 34.gif │ │ │ │ ├── 35.gif │ │ │ │ ├── 36.gif │ │ │ │ ├── 37.gif │ │ │ │ ├── 38.gif │ │ │ │ ├── 39.gif │ │ │ │ ├── 4.gif │ │ │ │ ├── 40.gif │ │ │ │ ├── 41.gif │ │ │ │ ├── 42.gif │ │ │ │ ├── 43.gif │ │ │ │ ├── 44.gif │ │ │ │ ├── 45.gif │ │ │ │ ├── 46.gif │ │ │ │ ├── 47.gif │ │ │ │ ├── 48.gif │ │ │ │ ├── 49.gif │ │ │ │ ├── 5.gif │ │ │ │ ├── 50.gif │ │ │ │ ├── 51.gif │ │ │ │ ├── 52.gif │ │ │ │ ├── 53.gif │ │ │ │ ├── 54.gif │ │ │ │ ├── 55.gif │ │ │ │ ├── 56.gif │ │ │ │ ├── 57.gif │ │ │ │ ├── 58.gif │ │ │ │ ├── 59.gif │ │ │ │ ├── 6.gif │ │ │ │ ├── 60.gif │ │ │ │ ├── 61.gif │ │ │ │ ├── 62.gif │ │ │ │ ├── 63.gif │ │ │ │ ├── 64.gif │ │ │ │ ├── 65.gif │ │ │ │ ├── 66.gif │ │ │ │ ├── 67.gif │ │ │ │ ├── 68.gif │ │ │ │ ├── 69.gif │ │ │ │ ├── 7.gif │ │ │ │ ├── 70.gif │ │ │ │ ├── 71.gif │ │ │ │ ├── 8.gif │ │ │ │ └── 9.gif │ │ ├── lay │ │ │ └── modules │ │ │ │ ├── carousel.js │ │ │ │ ├── code.js │ │ │ │ ├── colorpicker.js │ │ │ │ ├── element.js │ │ │ │ ├── flow.js │ │ │ │ ├── form.js │ │ │ │ ├── jquery.js │ │ │ │ ├── laydate.js │ │ │ │ ├── layedit.js │ │ │ │ ├── layer.js │ │ │ │ ├── laypage.js │ │ │ │ ├── laytpl.js │ │ │ │ ├── mobile.js │ │ │ │ ├── rate.js │ │ │ │ ├── slider.js │ │ │ │ ├── table.js │ │ │ │ ├── transfer.js │ │ │ │ ├── tree.js │ │ │ │ ├── upload.js │ │ │ │ └── util.js │ │ ├── layui.all.js │ │ └── layui.js │ └── pear │ │ ├── css │ │ ├── pear-module │ │ │ ├── button.css │ │ │ ├── card.css │ │ │ ├── code.css │ │ │ ├── cropper.css │ │ │ ├── dropdown.css │ │ │ ├── dtree │ │ │ │ ├── dtree.css │ │ │ │ ├── dtree.js │ │ │ │ └── font │ │ │ │ │ ├── dtreefont.css │ │ │ │ │ ├── dtreefont.eot │ │ │ │ │ ├── dtreefont.svg │ │ │ │ │ ├── dtreefont.ttf │ │ │ │ │ ├── dtreefont.woff │ │ │ │ │ └── icons.json │ │ │ ├── eleTree.css │ │ │ ├── form.css │ │ │ ├── frame.css │ │ │ ├── icon │ │ │ │ ├── icon.png │ │ │ │ ├── iconfont.css │ │ │ │ ├── iconfont.eot │ │ │ │ ├── iconfont.js │ │ │ │ ├── iconfont.json │ │ │ │ ├── iconfont.svg │ │ │ │ ├── iconfont.ttf │ │ │ │ ├── iconfont.woff │ │ │ │ └── iconfont.woff2 │ │ │ ├── iconPicker.css │ │ │ ├── json.css │ │ │ ├── label.css │ │ │ ├── layer.css │ │ │ ├── layout.css │ │ │ ├── link.css │ │ │ ├── loading.css │ │ │ ├── menu.css │ │ │ ├── message.css │ │ │ ├── notice.css │ │ │ ├── select.css │ │ │ ├── step.css │ │ │ ├── tab.css │ │ │ ├── table.css │ │ │ ├── tag.css │ │ │ ├── topBar.css │ │ │ └── treetable.css │ │ ├── pear.all.css │ │ └── pear.css │ │ ├── module │ │ ├── admin.js │ │ ├── area.js │ │ ├── button.js │ │ ├── common.js │ │ ├── count.js │ │ ├── cropper.js │ │ ├── design.js │ │ ├── dictionary.js │ │ ├── document.js │ │ ├── drawer.js │ │ ├── dtree.js │ │ ├── echarts.js │ │ ├── echartsTheme.js │ │ ├── eleTree.js │ │ ├── frame.js │ │ ├── hash.js │ │ ├── iconPicker.js │ │ ├── json.js │ │ ├── menu.js │ │ ├── message.js │ │ ├── notice.js │ │ ├── popup.js │ │ ├── select.js │ │ ├── step.js │ │ ├── tab.js │ │ ├── tag.js │ │ ├── theme.js │ │ ├── tinymce │ │ │ ├── tinymce.js │ │ │ └── tinymce │ │ │ │ ├── jquery.tinymce.min.js │ │ │ │ ├── langs │ │ │ │ ├── readme.md │ │ │ │ └── zh_CN.js │ │ │ │ ├── license.txt │ │ │ │ ├── plugins │ │ │ │ ├── advlist │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── anchor │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autolink │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autoresize │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autosave │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── bbcode │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── charmap │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── code │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── codesample │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── colorpicker │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── contextmenu │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── directionality │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── emoticons │ │ │ │ │ ├── js │ │ │ │ │ │ ├── emojis.js │ │ │ │ │ │ └── emojis.min.js │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── fullpage │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── fullscreen │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── help │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── hr │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── image │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── imagetools │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── importcss │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── indent2em │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── insertdatetime │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── legacyoutput │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── link │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── lists │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── media │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── nonbreaking │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── noneditable │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── pagebreak │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── paste │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── preview │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── print │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── quickbars │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── save │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── searchreplace │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── spellchecker │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── tabfocus │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── table │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── template │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── textcolor │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── textpattern │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── toc │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── visualblocks │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── visualchars │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ └── wordcount │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── skins │ │ │ │ ├── content │ │ │ │ │ ├── dark │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ ├── default │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ ├── document │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ └── content.min.css.map │ │ │ │ │ └── writer │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ ├── content.min.css │ │ │ │ │ │ └── content.min.css.map │ │ │ │ └── ui │ │ │ │ │ ├── oxide-dark │ │ │ │ │ ├── content.css │ │ │ │ │ ├── content.inline.css │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ ├── content.inline.min.css.map │ │ │ │ │ ├── content.min.css │ │ │ │ │ ├── content.min.css.map │ │ │ │ │ ├── content.mobile.css │ │ │ │ │ ├── content.mobile.min.css │ │ │ │ │ ├── content.mobile.min.css.map │ │ │ │ │ ├── fonts │ │ │ │ │ │ └── tinymce-mobile.woff │ │ │ │ │ ├── skin.css │ │ │ │ │ ├── skin.min.css │ │ │ │ │ ├── skin.min.css.map │ │ │ │ │ ├── skin.mobile.css │ │ │ │ │ ├── skin.mobile.min.css │ │ │ │ │ └── skin.mobile.min.css.map │ │ │ │ │ └── oxide │ │ │ │ │ ├── content.css │ │ │ │ │ ├── content.inline.css │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ ├── content.inline.min.css.map │ │ │ │ │ ├── content.min.css │ │ │ │ │ ├── content.min.css.map │ │ │ │ │ ├── content.mobile.css │ │ │ │ │ ├── content.mobile.min.css │ │ │ │ │ ├── content.mobile.min.css.map │ │ │ │ │ ├── fonts │ │ │ │ │ └── tinymce-mobile.woff │ │ │ │ │ ├── skin.min.css │ │ │ │ │ ├── skin.min.css.map │ │ │ │ │ ├── skin.min1.css │ │ │ │ │ ├── skin.mobile.css │ │ │ │ │ ├── skin.mobile.min.css │ │ │ │ │ └── skin.mobile.min.css.map │ │ │ │ ├── themes │ │ │ │ ├── mobile │ │ │ │ │ ├── theme.js │ │ │ │ │ └── theme.min.js │ │ │ │ └── silver │ │ │ │ │ ├── theme.js │ │ │ │ │ └── theme.min.js │ │ │ │ ├── tinymce.js │ │ │ │ └── tinymce.min.js │ │ ├── topBar.js │ │ ├── treetable.js │ │ └── yaml.js │ │ ├── pear.all.js │ │ └── pear.js ├── diagram-viewer │ ├── images │ │ ├── bg.png │ │ ├── breadcrumbs.png │ │ ├── checker-bg.png │ │ └── deployer │ │ │ ├── blue │ │ │ └── message_catch.png │ │ │ ├── business_rule.png │ │ │ ├── error_catch.png │ │ │ ├── error_throw.png │ │ │ ├── manual.png │ │ │ ├── message_catch.png │ │ │ ├── message_throw.png │ │ │ ├── receive.png │ │ │ ├── script.png │ │ │ ├── send.png │ │ │ ├── service.png │ │ │ ├── signal_catch.png │ │ │ ├── signal_throw.png │ │ │ ├── timer.png │ │ │ └── user.png │ ├── index.html │ ├── js │ │ ├── ActivitiRest.js │ │ ├── ActivityImpl.js │ │ ├── Color.js │ │ ├── LineBreakMeasurer.js │ │ ├── Polyline.js │ │ ├── ProcessDiagramCanvas.js │ │ ├── ProcessDiagramGenerator.js │ │ ├── jquery │ │ │ ├── jquery.asyncqueue.js │ │ │ ├── jquery.js │ │ │ └── jquery.progressbar.js │ │ ├── jstools.js │ │ ├── raphael.2.1.1.js │ │ ├── raphael.js │ │ ├── raphael_uncompressed.js │ │ └── textlayout.js │ └── style.css ├── editor-app │ ├── app-cfg.js │ ├── app.js │ ├── configuration │ │ ├── properties-assignment-controller.js │ │ ├── properties-condition-expression-controller.js │ │ ├── properties-custom-controllers.js │ │ ├── properties-default-controllers.js │ │ ├── properties-event-listeners-controller.js │ │ ├── properties-execution-listeners-controller.js │ │ ├── properties-fields-controller.js │ │ ├── properties-form-properties-controller.js │ │ ├── properties-in-parameters-controller.js │ │ ├── properties-message-definitions-controller.js │ │ ├── properties-message-scope-controller.js │ │ ├── properties-multiinstance-controller.js │ │ ├── properties-out-parameters-controller.js │ │ ├── properties-sequenceflow-order-controller.js │ │ ├── properties-signal-definitions-controller.js │ │ ├── properties-signal-scope-controller.js │ │ ├── properties-task-listeners-controller.js │ │ ├── properties.js │ │ ├── properties │ │ │ ├── assignment-display-template.html │ │ │ ├── assignment-popup.html │ │ │ ├── assignment-write-template.html │ │ │ ├── boolean-property-template.html │ │ │ ├── condition-expression-display-template.html │ │ │ ├── condition-expression-popup.html │ │ │ ├── condition-expression-write-template.html │ │ │ ├── default-value-display-template.html │ │ │ ├── event-listeners-display-template.html │ │ │ ├── event-listeners-popup.html │ │ │ ├── event-listeners-write-template.html │ │ │ ├── execution-listeners-display-template.html │ │ │ ├── execution-listeners-popup.html │ │ │ ├── execution-listeners-write-template.html │ │ │ ├── feedback-popup.html │ │ │ ├── fields-display-template.html │ │ │ ├── fields-popup.html │ │ │ ├── fields-write-template.html │ │ │ ├── form-properties-display-template.html │ │ │ ├── form-properties-popup.html │ │ │ ├── form-properties-write-template.html │ │ │ ├── in-parameters-display-template.html │ │ │ ├── in-parameters-popup.html │ │ │ ├── in-parameters-write-template.html │ │ │ ├── message-definitions-display-template.html │ │ │ ├── message-definitions-popup.html │ │ │ ├── message-definitions-write-template.html │ │ │ ├── message-property-write-template.html │ │ │ ├── multiinstance-property-write-template.html │ │ │ ├── out-parameters-display-template.html │ │ │ ├── out-parameters-popup.html │ │ │ ├── out-parameters-write-template.html │ │ │ ├── sequenceflow-order-display-template.html │ │ │ ├── sequenceflow-order-popup.html │ │ │ ├── sequenceflow-order-write-template.html │ │ │ ├── signal-definitions-display-template.html │ │ │ ├── signal-definitions-popup.html │ │ │ ├── signal-definitions-write-template.html │ │ │ ├── signal-property-write-template.html │ │ │ ├── string-property-write-mode-template.html │ │ │ ├── subprocess-reference-display-template.html │ │ │ ├── subprocess-reference-popup.html │ │ │ ├── subprocess-reference-write-template.html │ │ │ ├── task-listeners-display-template.html │ │ │ ├── task-listeners-popup.html │ │ │ ├── task-listeners-write-template.html │ │ │ ├── text-popup.html │ │ │ └── text-property-write-template.html │ │ ├── toolbar-custom-actions.js │ │ ├── toolbar-default-actions.js │ │ ├── toolbar.js │ │ └── url-config.js │ ├── css │ │ ├── style-common.css │ │ ├── style-editor.css │ │ └── style.css │ ├── editor-config.js │ ├── editor-controller.js │ ├── editor-utils.js │ ├── editor.html │ ├── editor │ │ ├── css │ │ │ └── editor.css │ │ ├── i18n │ │ │ ├── translation_de.js │ │ │ ├── translation_en_us.js │ │ │ ├── translation_signavio_de.js │ │ │ └── translation_signavio_en_us.js │ │ ├── oryx.debug.js │ │ └── oryx.js │ ├── eventbus.js │ ├── fonts │ │ ├── activiti-admin-webfont.eot │ │ ├── activiti-admin-webfont.svg │ │ ├── activiti-admin-webfont.ttf │ │ ├── activiti-admin-webfont.woff │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ ├── header-controller.js │ ├── i18n │ │ └── en.json │ ├── images │ │ ├── bpmn-error.png │ │ ├── bpmn-warning.png │ │ ├── datadefinition.png │ │ ├── delete.png │ │ ├── loading.gif │ │ ├── logo-2x.png │ │ ├── logo.png │ │ ├── nw-handle-dark.gif │ │ ├── se-handle-dark.gif │ │ ├── shapemenu_highlight.png │ │ └── wrench.png │ ├── libs │ │ ├── angular-cookies_1.2.13 │ │ │ ├── angular-cookies.min.js │ │ │ └── angular-cookies.min.js.map │ │ ├── angular-dragdrop.min-1.0.3.js │ │ ├── angular-dragdrop_1.0.7 │ │ │ └── angular-dragdrop.min.js │ │ ├── angular-mocks_1.2.13 │ │ │ └── angular-mocks.js │ │ ├── angular-resource_1.2.13 │ │ │ ├── angular-resource.js │ │ │ ├── angular-resource.min.js │ │ │ └── angular-resource.min.js.map │ │ ├── angular-route_1.2.13 │ │ │ ├── angular-route.js │ │ │ ├── angular-route.min.js │ │ │ └── angular-route.min.js.map │ │ ├── angular-sanitize_1.2.13 │ │ │ ├── angular-sanitize.js │ │ │ ├── angular-sanitize.min.js │ │ │ └── angular-sanitize.min.js.map │ │ ├── angular-scroll_0.5.7 │ │ │ └── angular-scroll.min.js │ │ ├── angular-strap_2.0.5 │ │ │ ├── angular-strap.min.js │ │ │ └── angular-strap.tpl.min.js │ │ ├── angular-translate-loader-static-files │ │ │ ├── .bower.json │ │ │ ├── angular-translate-loader-static-files.js │ │ │ └── angular-translate-loader-static-files.min.js │ │ ├── angular-translate-storage-cookie │ │ │ ├── .bower.json │ │ │ ├── angular-translate-storage-cookie.js │ │ │ └── angular-translate-storage-cookie.min.js │ │ ├── angular-translate_2.4.2 │ │ │ ├── angular-translate.js │ │ │ └── angular-translate.min.js │ │ ├── angular_1.2.13 │ │ │ ├── angular-animate.min.js │ │ │ └── angular.min.js │ │ ├── bootstrap-daterangepicker_1.3.7 │ │ │ ├── daterangepicker-bs3.css │ │ │ └── daterangepicker.js │ │ ├── bootstrap_3.1.1 │ │ │ ├── css │ │ │ │ ├── bootstrap-theme.css │ │ │ │ ├── bootstrap-theme.css.map │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ ├── bootstrap.css │ │ │ │ ├── bootstrap.css.map │ │ │ │ └── bootstrap.min.css │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ └── glyphicons-halflings-regular.woff │ │ │ └── js │ │ │ │ ├── bootstrap.js │ │ │ │ └── bootstrap.min.js │ │ ├── es5-shim-15.3.4.5 │ │ │ ├── .bower.json │ │ │ ├── .gitignore │ │ │ ├── CHANGES │ │ │ ├── CONTRIBUTORS.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── es5-sham.js │ │ │ ├── es5-sham.map │ │ │ ├── es5-sham.min.js │ │ │ ├── es5-shim.js │ │ │ ├── es5-shim.map │ │ │ ├── es5-shim.min.js │ │ │ ├── package.json │ │ │ └── tests │ │ │ │ ├── helpers │ │ │ │ ├── h-kill.js │ │ │ │ ├── h-matchers.js │ │ │ │ └── h.js │ │ │ │ ├── index.html │ │ │ │ ├── index.min.html │ │ │ │ ├── lib │ │ │ │ ├── jasmine-html.js │ │ │ │ ├── jasmine.css │ │ │ │ ├── jasmine.js │ │ │ │ ├── jasmine_favicon.png │ │ │ │ └── json2.js │ │ │ │ └── spec │ │ │ │ ├── s-array.js │ │ │ │ ├── s-date.js │ │ │ │ ├── s-function.js │ │ │ │ ├── s-number.js │ │ │ │ ├── s-object.js │ │ │ │ └── s-string.js │ │ ├── jquery-ui-1.10.3.custom.min.js │ │ ├── jquery.autogrow-textarea.js │ │ ├── jquery_1.11.0 │ │ │ ├── jquery.js │ │ │ ├── jquery.min.js │ │ │ └── jquery.min.map │ │ ├── json3_3.2.6 │ │ │ ├── LICENSE │ │ │ └── lib │ │ │ │ ├── json3.js │ │ │ │ └── json3.min.js │ │ ├── momentjs_2.5.1 │ │ │ └── momentjs.min.js │ │ ├── mousetrap-1.4.5.min.js │ │ ├── ng-grid-2.0.7-min.js │ │ ├── ng-grid-2.0.7.min.css │ │ ├── path_parser.js │ │ ├── prototype-1.5.1.js │ │ └── ui-utils.min-0.0.4.js │ ├── partials │ │ ├── root-stencil-item-template.html │ │ └── stencil-item-template.html │ ├── plugins.xml │ ├── popups │ │ ├── icon-template.html │ │ ├── save-model.html │ │ ├── select-shape.html │ │ └── unsaved-changes.html │ ├── select-shape-controller.js │ ├── stencil-controller.js │ ├── stencilsets │ │ └── bpmn2.0 │ │ │ └── icons │ │ │ ├── activity │ │ │ ├── event.subprocess.collapsed.png │ │ │ ├── event.subprocess.png │ │ │ ├── expanded.subprocess.png │ │ │ ├── list │ │ │ │ ├── type.business.rule.png │ │ │ │ ├── type.camel.png │ │ │ │ ├── type.manual.png │ │ │ │ ├── type.mule.png │ │ │ │ ├── type.receive.png │ │ │ │ ├── type.script.png │ │ │ │ ├── type.send.png │ │ │ │ ├── type.service.png │ │ │ │ ├── type.shell.png │ │ │ │ └── type.user.png │ │ │ ├── subprocess.png │ │ │ └── task.png │ │ │ ├── artifact │ │ │ └── text.annotation.png │ │ │ ├── catching │ │ │ ├── cancel.png │ │ │ ├── compensation.png │ │ │ ├── error.png │ │ │ ├── message.png │ │ │ ├── signal.png │ │ │ └── timer.png │ │ │ ├── connector │ │ │ ├── association.undirected.png │ │ │ ├── association.unidirectional.png │ │ │ ├── messageflow.png │ │ │ └── sequenceflow.png │ │ │ ├── dataobject │ │ │ └── data.store.png │ │ │ ├── diagram.png │ │ │ ├── endevent │ │ │ ├── cancel.png │ │ │ ├── error.png │ │ │ ├── none.png │ │ │ └── terminate.png │ │ │ ├── gateway │ │ │ ├── eventbased.png │ │ │ ├── exclusive.databased.png │ │ │ ├── inclusive.png │ │ │ └── parallel.png │ │ │ ├── startevent │ │ │ ├── error.png │ │ │ ├── message.png │ │ │ ├── none.png │ │ │ ├── signal.png │ │ │ └── timer.png │ │ │ ├── swimlane │ │ │ ├── lane.png │ │ │ └── pool.png │ │ │ └── throwing │ │ │ ├── none.png │ │ │ └── signal.png │ └── toolbar-controller.js ├── pear.config.json ├── pear.config.yml └── tool │ └── htmlformat │ ├── base.js │ ├── bootstrap.min.css │ ├── bootstrap.min.js │ ├── htmlformat.js │ ├── javascriptFormat.html │ ├── jquery-2.2.3.min.js │ └── jsformat.js └── templates ├── admin ├── autoCode │ ├── global.html │ └── view.html ├── dict_data │ ├── add.html │ ├── edit.html │ └── list.html ├── dict_type │ ├── add.html │ ├── edit.html │ └── list.html ├── email │ ├── add.html │ ├── list.html │ └── view.html ├── file │ ├── add.html │ ├── edit.html │ └── list.html ├── index.html ├── log │ └── list.html ├── permission │ ├── add.html │ ├── edit.html │ ├── list.html │ └── tree.html ├── province │ ├── list.html │ ├── sysArea │ │ ├── add.html │ │ ├── edit.html │ │ └── list.html │ ├── sysCity │ │ ├── add.html │ │ ├── edit.html │ │ └── list.html │ ├── sysProvince │ │ ├── add.html │ │ ├── edit.html │ │ └── list.html │ └── sysStreet │ │ ├── add.html │ │ ├── edit.html │ │ └── list.html ├── role │ ├── add.html │ ├── edit.html │ └── list.html ├── service │ └── list.html ├── sysDepartment │ ├── add.html │ ├── edit.html │ └── list.html ├── sysInterUrl │ ├── add.html │ ├── edit.html │ └── list.html ├── sysNotice │ ├── add.html │ ├── edit.html │ ├── list.html │ ├── list_view.html │ └── view.html ├── sysPosition │ ├── add.html │ ├── edit.html │ └── list.html ├── sysQuartzJob │ ├── add.html │ ├── edit.html │ └── list.html ├── sysQuartzJobLog │ ├── detail.html │ └── list.html └── user │ ├── add.html │ ├── edit.html │ ├── editPwd.html │ └── list.html ├── error ├── 403.html ├── 404.html └── 500.html ├── include.html ├── index.html └── login.html /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | **/target 3 | **/webapp/userfiles 4 | **/WEB-INF/classes 5 | **/logs/log*.log 6 | 7 | .classpath 8 | .project 9 | 10 | .idea 11 | *.ipr 12 | *.iml 13 | *.iws 14 | *.lic 15 | rebel.xml 16 | /.factorypath 17 | /.springBeans 18 | /target/ 19 | /.apt_generated/ 20 | /bin/ 21 | /.apt_generated_tests/ 22 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jst.j2ee.ejb.annotations.xdoclet.prefs: -------------------------------------------------------------------------------- 1 | XDOCLETBUILDERACTIVE=false 2 | XDOCLETHOME= 3 | XDOCLETUSEGLOBAL=false 4 | XDOCLETVERSION=1.2.1 5 | eclipse.preferences.version=1 6 | -------------------------------------------------------------------------------- /src/main/java/com/fc/V2WebInitializer.java: -------------------------------------------------------------------------------- 1 | package com.fc; 2 | 3 | import org.springframework.boot.builder.SpringApplicationBuilder; 4 | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 5 | 6 | /** 7 | * @ClassName: SpringbootWebInitializer 8 | * @Description: web容器中进行部署 9 | * @author fuce 10 | * @date 2018年8月18日 11 | * 12 | */ 13 | public class V2WebInitializer extends SpringBootServletInitializer{ 14 | @Override 15 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) 16 | { 17 | return application.sources(V2Application.class); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/fc/v2/common/base/BaseService.java: -------------------------------------------------------------------------------- 1 | package com.fc.v2.common.base; 2 | 3 | import java.util.List; 4 | import org.apache.ibatis.annotations.Param; 5 | /** 6 | * 抽象类BaseService 7 | * @ClassName: BaseService 8 | * @Description: Service实现这个 9 | * @author fuce 10 | * @date 2018年6月3日 11 | * 12 | */ 13 | public interface BaseService { 14 | 15 | int deleteByPrimaryKey(String id); 16 | 17 | int insertSelective(T record); 18 | 19 | T selectByPrimaryKey(String id); 20 | 21 | int updateByPrimaryKeySelective(T record); 22 | 23 | int updateByExampleSelective(@Param("record") T record, @Param("example") T2 example); 24 | 25 | int updateByExample(@Param("record") T record, @Param("example") T2 example); 26 | 27 | List selectByExample(T2 example); 28 | 29 | long countByExample(T2 example); 30 | 31 | int deleteByExample(T2 example); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/fc/v2/common/conf/FileConfig.java: -------------------------------------------------------------------------------- 1 | package com.fc.v2.common.conf; 2 | 3 | import org.springframework.boot.context.properties.ConfigurationProperties; 4 | import org.springframework.stereotype.Component; 5 | 6 | /** 7 | * 读取项目相关配置 8 | * 9 | * @author fuce 10 | */ 11 | @Component 12 | @ConfigurationProperties(prefix = "spring.servlet.multipart") 13 | public class FileConfig 14 | { 15 | /**单个文件大小*/ 16 | private static String maxFileSize; 17 | 18 | public static String getMaxFileSize() { 19 | maxFileSize=maxFileSize.replace("MB", ""); 20 | return maxFileSize; 21 | } 22 | 23 | public void setMaxFileSize(String maxFileSize) { 24 | FileConfig.maxFileSize = maxFileSize; 25 | } 26 | 27 | 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/fc/v2/common/conf/PageHelperConf.java: -------------------------------------------------------------------------------- 1 | package com.fc.v2.common.conf; 2 | 3 | import java.util.Properties; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import com.github.pagehelper.PageHelper; 7 | 8 | /** 9 | * 分页插件配置类 10 | * @ClassName: PageHelperConf 11 | * @Description: 这里用一句话描述这个类的作用 12 | * @author fuce 13 | * @date 2018年6月3日 14 | * 15 | */ 16 | @Configuration 17 | public class PageHelperConf { 18 | 19 | /** 20 | * 分页插件处理 21 | * @return 22 | */ 23 | @Bean 24 | public PageHelper pageHelper() { 25 | PageHelper pageHelper = new PageHelper(); 26 | Properties properties = new Properties(); 27 | properties.setProperty("offsetAsPageNum", "true"); 28 | properties.setProperty("rowBoundsWithCount", "true"); 29 | properties.setProperty("reasonable", "true"); 30 | properties.setProperty("dialect", "mysql"); //配置mysql数据库的方言 31 | pageHelper.setProperties(properties); 32 | return pageHelper; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/fc/v2/common/conf/PutFilter.java: -------------------------------------------------------------------------------- 1 | package com.fc.v2.common.conf; 2 | 3 | import org.springframework.stereotype.Component; 4 | import org.springframework.web.filter.FormContentFilter; 5 | 6 | /** 7 | * 让put能获取到参数 8 | */ 9 | @Component 10 | public class PutFilter extends FormContentFilter { 11 | } -------------------------------------------------------------------------------- /src/main/java/com/fc/v2/common/conf/oss/OssConfig.java: -------------------------------------------------------------------------------- 1 | package com.fc.v2.common.conf.oss; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target({ElementType.METHOD}) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface OssConfig { 11 | 12 | String value() default ""; 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/fc/v2/common/conf/xss/XssStringJsonDeserializer.java: -------------------------------------------------------------------------------- 1 | package com.fc.v2.common.conf.xss; 2 | 3 | import java.io.IOException; 4 | 5 | import com.fasterxml.jackson.core.JsonParser; 6 | import com.fasterxml.jackson.databind.DeserializationContext; 7 | import com.fasterxml.jackson.databind.JsonDeserializer; 8 | 9 | /** 10 | * Created by wjy on 2020/11/5. 11 | * 基于xss的JsonDeserializer 12 | */ 13 | public class XssStringJsonDeserializer extends JsonDeserializer { 14 | 15 | 16 | @Override 17 | public Class handledType() { 18 | return String.class; 19 | } 20 | 21 | @Override 22 | public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { 23 | return XssUtil.cleanXSS(jsonParser.getValueAsString()); 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/java/com/fc/v2/common/conf/xss/XssUtil.java: -------------------------------------------------------------------------------- 1 | package com.fc.v2.common.conf.xss; 2 | 3 | import java.util.Objects; 4 | 5 | /** 6 | * Created by wjy on 2020/11/5. 7 | * xss工具类 8 | */ 9 | public class XssUtil { 10 | 11 | public static String cleanXSS(String value) { 12 | if (Objects.isNull(value)) { 13 | return value; 14 | } 15 | //在这里自定义需要过滤的字符 16 | value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;"); 17 | value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;"); 18 | value = value.replaceAll("'", "& #39;"); 19 | value = value.replaceAll("eval\\((.*)\\)", ""); 20 | value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); 21 | value = value.replaceAll(" 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/main/resources/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 前端展示 6 | 7 | 8 | 9 | 点我跳转到后台 10 | 11 | 12 | 13 |
14 | 15 | 这儿写前台html,如果你是只有后台的程序,请自行修改 IndexController 16 |
17 | 18 | 19 | 28 | --------------------------------------------------------------------------------