├── doc ├── img │ ├── 0.png │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ ├── 9.png │ └── jwt.png ├── 端口规划.txt └── sql │ └── jboot-b2c.sql ├── jboot-admin-service ├── jboot-admin-service-provider │ └── src │ │ └── main │ │ ├── resources │ │ ├── sql │ │ │ ├── system │ │ │ │ ├── sysUser.sql │ │ │ │ ├── sysRole.sql │ │ │ │ └── sysRes.sql │ │ │ ├── all.sql │ │ │ └── system.sql │ │ └── banner.txt │ │ └── java │ │ └── io │ │ └── jboot │ │ └── admin │ │ └── service │ │ └── provider │ │ ├── app │ │ └── Application.java │ │ ├── ge │ │ └── GenCode.java │ │ ├── RoleResServiceImpl.java │ │ ├── UserRoleServiceImpl.java │ │ └── LogServiceImpl.java ├── jboot-admin-service-entity │ ├── src │ │ └── main │ │ │ ├── java │ │ │ └── io │ │ │ │ └── jboot │ │ │ │ └── admin │ │ │ │ └── service │ │ │ │ └── entity │ │ │ │ ├── GenCode.java │ │ │ │ ├── model │ │ │ │ ├── Log.java │ │ │ │ ├── Res.java │ │ │ │ ├── Data.java │ │ │ │ ├── Role.java │ │ │ │ ├── User.java │ │ │ │ ├── RoleRes.java │ │ │ │ ├── UserRole.java │ │ │ │ └── base │ │ │ │ │ ├── BaseRoleRes.java │ │ │ │ │ └── BaseUserRole.java │ │ │ │ └── status │ │ │ │ └── system │ │ │ │ ├── ResStatus.java │ │ │ │ ├── RoleStatus.java │ │ │ │ ├── DataStatus.java │ │ │ │ ├── UserOnlineStatus.java │ │ │ │ └── UserStatus.java │ │ │ └── resources │ │ │ └── jboot.properties │ └── pom.xml ├── jboot-admin-service-api │ ├── src │ │ └── main │ │ │ ├── java │ │ │ └── io │ │ │ │ └── jboot │ │ │ │ └── admin │ │ │ │ └── service │ │ │ │ └── api │ │ │ │ └── ge │ │ │ │ └── GenCode.java │ │ │ └── resources │ │ │ └── jboot.properties │ └── pom.xml └── pom.xml ├── .gitattributes ├── jboot-admin-base └── src │ └── main │ ├── resources │ └── META-INF │ │ └── services │ │ └── com.weibo.api.motan.codec.Serialization │ └── java │ └── io │ └── jboot │ └── admin │ └── base │ ├── web │ ├── base │ │ ├── BaseController.java │ │ └── BaseValidator.java │ └── render │ │ ├── AppRenderFactory.java │ │ └── error │ │ ├── BaseErrorRender.java │ │ └── JsonErrorRender.java │ ├── common │ ├── RegexKey.java │ ├── ResultCode.java │ ├── ServiceConst.java │ ├── Consts.java │ ├── BaseStatus.java │ ├── ErrorResult.java │ ├── CacheKey.java │ ├── MenuItem.java │ ├── AppInfo.java │ ├── ZTree.java │ └── RetResult.java │ ├── interceptor │ ├── NotNullPara.java │ ├── BusinessExceptionInterceptor.java │ └── NotNullParaInterceptor.java │ ├── exception │ ├── ExceptionLoader.java │ ├── SystemException.java │ ├── BusinessException.java │ └── ValidatorException.java │ ├── plugin │ ├── shiro │ │ ├── SessionHandler.java │ │ ├── CharacterEncodingFilter.java │ │ ├── cache │ │ │ ├── ShiroCacheManager.java │ │ │ └── ShiroCache.java │ │ ├── WebSessionListener.java │ │ ├── MuitiLoginToken.java │ │ ├── auth │ │ │ └── MuitiAuthenticatied.java │ │ ├── SessionDAO.java │ │ ├── ShiroCacheUtils.java │ │ └── ShiroDbRealm.java │ └── jwt │ │ └── shiro │ │ ├── JwtSubjectFactory.java │ │ └── JwtAuthenticationToken.java │ ├── captcha │ └── CaptchaCache.java │ ├── rest │ └── datatable │ │ └── DataTable.java │ ├── rpc │ └── motan │ │ └── FstMotanSerialization.java │ └── gencode │ ├── model │ ├── AppMetaBuilder.java │ ├── AppModelGeneratorConfig.java │ └── AppModelGenerator.java │ └── service │ ├── AppServiceGenerator.java │ └── AppServiceGeneratorConfig.java ├── jboot-admin └── src │ └── main │ ├── resources │ ├── static │ │ ├── img │ │ │ ├── bg.png │ │ │ ├── v.png │ │ │ ├── code.png │ │ │ └── user.png │ │ ├── js │ │ │ ├── layui │ │ │ │ ├── font │ │ │ │ │ ├── iconfont.eot │ │ │ │ │ ├── iconfont.ttf │ │ │ │ │ └── iconfont.woff │ │ │ │ ├── images │ │ │ │ │ └── face │ │ │ │ │ │ ├── 0.gif │ │ │ │ │ │ ├── 1.gif │ │ │ │ │ │ ├── 2.gif │ │ │ │ │ │ ├── 3.gif │ │ │ │ │ │ ├── 4.gif │ │ │ │ │ │ ├── 5.gif │ │ │ │ │ │ ├── 6.gif │ │ │ │ │ │ ├── 7.gif │ │ │ │ │ │ ├── 8.gif │ │ │ │ │ │ ├── 9.gif │ │ │ │ │ │ ├── 10.gif │ │ │ │ │ │ ├── 11.gif │ │ │ │ │ │ ├── 12.gif │ │ │ │ │ │ ├── 13.gif │ │ │ │ │ │ ├── 14.gif │ │ │ │ │ │ ├── 15.gif │ │ │ │ │ │ ├── 16.gif │ │ │ │ │ │ ├── 17.gif │ │ │ │ │ │ ├── 18.gif │ │ │ │ │ │ ├── 19.gif │ │ │ │ │ │ ├── 20.gif │ │ │ │ │ │ ├── 21.gif │ │ │ │ │ │ ├── 22.gif │ │ │ │ │ │ ├── 23.gif │ │ │ │ │ │ ├── 24.gif │ │ │ │ │ │ ├── 25.gif │ │ │ │ │ │ ├── 26.gif │ │ │ │ │ │ ├── 27.gif │ │ │ │ │ │ ├── 28.gif │ │ │ │ │ │ ├── 29.gif │ │ │ │ │ │ ├── 30.gif │ │ │ │ │ │ ├── 31.gif │ │ │ │ │ │ ├── 32.gif │ │ │ │ │ │ ├── 33.gif │ │ │ │ │ │ ├── 34.gif │ │ │ │ │ │ ├── 35.gif │ │ │ │ │ │ ├── 36.gif │ │ │ │ │ │ ├── 37.gif │ │ │ │ │ │ ├── 38.gif │ │ │ │ │ │ ├── 39.gif │ │ │ │ │ │ ├── 40.gif │ │ │ │ │ │ ├── 41.gif │ │ │ │ │ │ ├── 42.gif │ │ │ │ │ │ ├── 43.gif │ │ │ │ │ │ ├── 44.gif │ │ │ │ │ │ ├── 45.gif │ │ │ │ │ │ ├── 46.gif │ │ │ │ │ │ ├── 47.gif │ │ │ │ │ │ ├── 48.gif │ │ │ │ │ │ ├── 49.gif │ │ │ │ │ │ ├── 50.gif │ │ │ │ │ │ ├── 51.gif │ │ │ │ │ │ ├── 52.gif │ │ │ │ │ │ ├── 53.gif │ │ │ │ │ │ ├── 54.gif │ │ │ │ │ │ ├── 55.gif │ │ │ │ │ │ ├── 56.gif │ │ │ │ │ │ ├── 57.gif │ │ │ │ │ │ ├── 58.gif │ │ │ │ │ │ ├── 59.gif │ │ │ │ │ │ ├── 60.gif │ │ │ │ │ │ ├── 61.gif │ │ │ │ │ │ ├── 62.gif │ │ │ │ │ │ ├── 63.gif │ │ │ │ │ │ ├── 64.gif │ │ │ │ │ │ ├── 65.gif │ │ │ │ │ │ ├── 66.gif │ │ │ │ │ │ ├── 67.gif │ │ │ │ │ │ ├── 68.gif │ │ │ │ │ │ ├── 69.gif │ │ │ │ │ │ ├── 70.gif │ │ │ │ │ │ └── 71.gif │ │ │ │ ├── css │ │ │ │ │ └── modules │ │ │ │ │ │ ├── layer │ │ │ │ │ │ └── default │ │ │ │ │ │ │ ├── icon.png │ │ │ │ │ │ │ ├── icon-ext.png │ │ │ │ │ │ │ ├── loading-0.gif │ │ │ │ │ │ │ ├── loading-1.gif │ │ │ │ │ │ │ └── loading-2.gif │ │ │ │ │ │ └── code.css │ │ │ │ └── lay │ │ │ │ │ └── modules │ │ │ │ │ ├── code.js │ │ │ │ │ ├── laytpl.js │ │ │ │ │ ├── flow.js │ │ │ │ │ └── util.js │ │ │ └── rule.txt │ │ └── css │ │ │ └── zTreeStyle │ │ │ └── img │ │ │ ├── diy │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ ├── 4.png │ │ │ ├── 5.png │ │ │ ├── 6.png │ │ │ ├── 7.png │ │ │ ├── 8.png │ │ │ ├── 9.png │ │ │ ├── 1_open.png │ │ │ └── 1_close.png │ │ │ ├── loading.gif │ │ │ ├── line_conn.gif │ │ │ ├── zTreeStandard.gif │ │ │ └── zTreeStandard.png │ ├── swaggerui │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ └── oauth2-redirect.html │ ├── template │ │ ├── 401.html │ │ ├── 403.html │ │ ├── 404.html │ │ ├── 500.html │ │ ├── show.html │ │ ├── exception.html │ │ ├── common │ │ │ ├── include │ │ │ │ ├── _css.html │ │ │ │ └── _js.html │ │ │ └── layout │ │ │ │ └── _page_layout.html │ │ ├── welcome.html │ │ └── system │ │ │ └── user │ │ │ └── profile.html │ └── banner.txt │ └── java │ └── io │ └── jboot │ └── admin │ ├── Application.java │ ├── validator │ ├── LoginValidator.java │ └── system │ │ ├── ChangePwdValidator.java │ │ └── ResValidator.java │ ├── support │ ├── auth │ │ ├── AuthUtils.java │ │ └── AuthInterceptor.java │ ├── enjoy │ │ └── directive │ │ │ ├── StatusTplDirective.java │ │ │ ├── OptionStatusDirective.java │ │ │ ├── DataDirective.java │ │ │ ├── DataTplDirective.java │ │ │ └── OptionDirective.java │ └── log │ │ └── LogInterceptor.java │ └── controller │ └── system │ └── LogController.java ├── jboot-b2c ├── src │ └── main │ │ ├── resources │ │ ├── static │ │ │ └── js │ │ │ │ └── layui │ │ │ │ ├── font │ │ │ │ ├── iconfont.eot │ │ │ │ ├── iconfont.ttf │ │ │ │ └── iconfont.woff │ │ │ │ ├── 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 │ │ │ │ ├── css │ │ │ │ └── modules │ │ │ │ │ ├── layer │ │ │ │ │ └── default │ │ │ │ │ │ ├── icon.png │ │ │ │ │ │ ├── icon-ext.png │ │ │ │ │ │ ├── loading-0.gif │ │ │ │ │ │ ├── loading-1.gif │ │ │ │ │ │ └── loading-2.gif │ │ │ │ │ └── code.css │ │ │ │ └── lay │ │ │ │ └── modules │ │ │ │ ├── code.js │ │ │ │ ├── laytpl.js │ │ │ │ ├── flow.js │ │ │ │ └── util.js │ │ ├── template │ │ │ ├── common │ │ │ │ └── include │ │ │ │ │ ├── _css.html │ │ │ │ │ └── _js.html │ │ │ ├── 401.html │ │ │ ├── 403.html │ │ │ ├── 404.html │ │ │ ├── 500.html │ │ │ └── exception.html │ │ ├── banner.txt │ │ └── shiro.ini │ │ └── java │ │ └── io │ │ └── jboot │ │ └── b2c │ │ ├── Application.java │ │ ├── support │ │ └── JwtAuthorizingRealm.java │ │ └── controller │ │ └── MainController.java └── README.md ├── jboot-wechat └── src │ └── main │ ├── java │ └── io │ │ └── jboot │ │ └── wechat │ │ ├── Application.java │ │ └── controller │ │ └── wechat │ │ ├── WeixinMsgController.java │ │ └── UserController.java │ └── resources │ └── banner.txt ├── jboot-b2c-service ├── jboot-b2c-service-provider │ └── src │ │ └── main │ │ ├── java │ │ └── io │ │ │ └── jboot │ │ │ └── b2c │ │ │ └── service │ │ │ └── provider │ │ │ ├── app │ │ │ └── Application.java │ │ │ ├── ge │ │ │ └── GenCode.java │ │ │ └── ProductServiceImpl.java │ │ └── resources │ │ └── banner.txt ├── jboot-b2c-service-api │ ├── src │ │ └── main │ │ │ ├── java │ │ │ └── io │ │ │ │ └── jboot │ │ │ │ └── b2c │ │ │ │ └── service │ │ │ │ └── api │ │ │ │ └── ge │ │ │ │ └── GenCode.java │ │ │ └── resources │ │ │ └── jboot.properties │ └── pom.xml ├── jboot-b2c-service-entity │ ├── src │ │ └── main │ │ │ ├── java │ │ │ └── io │ │ │ │ └── jboot │ │ │ │ └── b2c │ │ │ │ └── service │ │ │ │ └── entity │ │ │ │ ├── GenCode.java │ │ │ │ ├── model │ │ │ │ ├── Product.java │ │ │ │ └── base │ │ │ │ │ └── BaseProduct.java │ │ │ │ └── status │ │ │ │ └── ProductStatus.java │ │ │ └── resources │ │ │ └── jboot.properties │ └── pom.xml └── pom.xml └── .gitignore /doc/img/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/0.png -------------------------------------------------------------------------------- /doc/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/1.png -------------------------------------------------------------------------------- /doc/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/2.png -------------------------------------------------------------------------------- /doc/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/3.png -------------------------------------------------------------------------------- /doc/img/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/4.png -------------------------------------------------------------------------------- /doc/img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/5.png -------------------------------------------------------------------------------- /doc/img/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/6.png -------------------------------------------------------------------------------- /doc/img/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/7.png -------------------------------------------------------------------------------- /doc/img/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/8.png -------------------------------------------------------------------------------- /doc/img/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/9.png -------------------------------------------------------------------------------- /doc/img/jwt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/doc/img/jwt.png -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/resources/sql/system/sysUser.sql: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/resources/sql/all.sql: -------------------------------------------------------------------------------- 1 | #include("system.sql") -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=Java 2 | *.css linguist-language=Java 3 | *.html linguist-language=Java -------------------------------------------------------------------------------- /jboot-admin-base/src/main/resources/META-INF/services/com.weibo.api.motan.codec.Serialization: -------------------------------------------------------------------------------- 1 | io.jboot.admin.base.rpc.motan.FstMotanSerialization -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/img/bg.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/img/v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/img/v.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/img/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/img/code.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/img/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/img/user.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/swaggerui/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/swaggerui/favicon-16x16.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/swaggerui/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/swaggerui/favicon-32x32.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/font/iconfont.eot -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/0.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/1.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/2.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/3.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/4.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/5.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/6.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/7.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/8.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/9.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/font/iconfont.eot -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/font/iconfont.woff -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/0.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/1.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/10.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/11.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/12.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/13.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/14.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/15.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/16.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/17.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/18.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/19.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/2.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/20.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/21.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/22.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/23.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/24.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/25.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/26.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/27.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/28.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/29.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/3.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/30.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/31.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/32.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/33.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/34.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/35.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/36.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/37.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/38.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/39.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/4.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/40.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/41.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/42.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/43.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/44.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/45.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/46.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/47.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/48.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/49.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/5.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/50.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/51.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/52.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/53.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/54.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/55.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/56.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/57.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/58.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/59.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/6.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/60.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/61.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/62.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/63.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/64.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/65.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/66.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/67.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/68.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/69.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/7.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/70.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/71.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/8.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/images/face/9.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/2.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/3.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/4.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/5.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/6.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/7.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/8.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/9.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/font/iconfont.woff -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/10.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/11.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/12.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/13.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/14.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/15.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/16.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/17.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/18.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/19.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/20.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/21.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/22.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/23.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/24.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/25.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/26.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/27.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/28.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/29.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/30.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/31.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/32.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/33.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/34.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/35.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/36.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/37.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/38.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/39.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/40.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/41.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/42.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/43.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/44.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/45.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/46.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/47.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/48.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/49.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/50.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/51.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/52.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/53.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/54.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/55.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/56.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/57.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/58.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/59.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/60.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/61.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/62.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/63.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/64.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/65.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/66.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/67.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/68.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/69.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/70.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/images/face/71.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/loading.gif -------------------------------------------------------------------------------- /jboot-b2c/README.md: -------------------------------------------------------------------------------- 1 | ### jwt + shiro 认证授权 demo 2 | 3 | 登录后返回 jwt,配合 shiro 完成认证。 4 | 5 | shiro完全无状态化,不创建session,无cookie环境下使用。 6 | 7 | 实现 jwt 退出机制,退出后 jwt 将被加入黑名单,保证安全。 8 | 9 | 10 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/1_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/1_open.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/line_conn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/line_conn.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/1_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/diy/1_close.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/zTreeStandard.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/zTreeStandard.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/css/zTreeStyle/img/zTreeStandard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/css/zTreeStyle/img/zTreeStandard.png -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-b2c/src/main/resources/static/js/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/template/common/include/_css.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkanyue/jboot-admin/HEAD/jboot-admin/src/main/resources/static/js/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/401.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 401 6 | 7 | 8 |

401

9 | 10 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/403.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 403 6 | 7 | 8 |

403

9 | 10 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 404 6 | 7 | 8 |

404

9 | 10 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 500 6 | 7 | 8 |

500

9 | 10 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/template/401.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 401 6 | 7 | 8 |

401

9 | 10 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/template/403.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 403 6 | 7 | 8 |

403

9 | 10 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/template/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 404 6 | 7 | 8 |

404

9 | 10 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/template/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 500 6 | 7 | 8 |

500

9 | 10 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/show.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 7 | 8 |

show

9 | 10 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/template/common/include/_js.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/template/exception.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 提示 6 | 7 | 8 |

#(message ?? "服务异常,请稍后重试")

9 | 10 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/exception.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 提示 6 | 7 | 8 |

#(message ?? "服务异常,请稍后重试")

9 | 10 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/java/io/jboot/b2c/Application.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c; 2 | 3 | import io.jboot.Jboot; 4 | 5 | /** 6 | * 服务启动入口 7 | * @author Rlax 8 | * 9 | */ 10 | public class Application { 11 | public static void main(String [] args){ 12 | Jboot.run(args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/web/base/BaseController.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.web.base; 2 | 3 | import io.jboot.web.controller.JbootController; 4 | 5 | /** 6 | * 控制器基类 7 | * @author Rlax 8 | * 9 | */ 10 | public class BaseController extends JbootController { 11 | } 12 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/web/base/BaseValidator.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.web.base; 2 | 3 | import com.jfinal.validate.Validator; 4 | 5 | /** 6 | * 校验器基类 7 | * @author Rlax 8 | * 9 | */ 10 | public abstract class BaseValidator extends Validator { 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/resources/sql/system.sql: -------------------------------------------------------------------------------- 1 | #namespace("system-res") 2 | #include("system/sysRes.sql") 3 | #end 4 | 5 | #namespace("system-role") 6 | #include("system/sysRole.sql") 7 | #end 8 | 9 | #namespace("system-user") 10 | #include("system/sysUser.sql") 11 | #end -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/Application.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin; 2 | 3 | import io.jboot.Jboot; 4 | 5 | /** 6 | * 服务启动入口 7 | * @author Rlax 8 | * 9 | */ 10 | public class Application { 11 | public static void main(String [] args){ 12 | Jboot.run(args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /jboot-wechat/src/main/java/io/jboot/wechat/Application.java: -------------------------------------------------------------------------------- 1 | package io.jboot.wechat; 2 | 3 | import io.jboot.Jboot; 4 | 5 | /** 6 | * 服务启动入口 7 | * @author Rlax 8 | * 9 | */ 10 | public class Application { 11 | public static void main(String [] args){ 12 | Jboot.run(args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/resources/sql/system/sysRole.sql: -------------------------------------------------------------------------------- 1 | #sql("findByUserName") 2 | SELECT 3 | b.* 4 | FROM 5 | sys_role b, 6 | sys_user d, 7 | sys_user_role e 8 | WHERE 9 | b.id = e.role_id 10 | AND d.id = e.user_id 11 | AND d.`name` = ? 12 | #end -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/common/include/_css.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-provider/src/main/java/io/jboot/b2c/service/provider/app/Application.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c.service.provider.app; 2 | 3 | import io.jboot.Jboot; 4 | 5 | /** 6 | * 服务启动入口 7 | * @author Rlax 8 | * 9 | */ 10 | public class Application { 11 | public static void main(String [] args){ 12 | Jboot.run(args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/java/io/jboot/admin/service/provider/app/Application.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.provider.app; 2 | 3 | import io.jboot.Jboot; 4 | 5 | /** 6 | * 服务启动入口 7 | * @author Rlax 8 | * 9 | */ 10 | public class Application { 11 | public static void main(String [] args){ 12 | Jboot.run(args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/RegexKey.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | /** 4 | * 正则校验常量类 5 | * @author Rlax 6 | * 7 | */ 8 | public class RegexKey { 9 | 10 | public final static String MOBILE = "^(((13[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\\d{8})$"; 11 | 12 | public final static String EMAIL = "\\w+@(\\w+.)+[a-z]{2,3}"; 13 | } 14 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-api/src/main/java/io/jboot/b2c/service/api/ge/GenCode.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c.service.api.ge; 2 | 3 | import io.jboot.admin.base.gencode.service.AppServiceGenerator; 4 | 5 | /** 6 | * 代码生成 7 | * @author Rlax 8 | * 9 | */ 10 | public class GenCode { 11 | 12 | public static void main(String[] args) { 13 | AppServiceGenerator.doGenerate(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-entity/src/main/java/io/jboot/b2c/service/entity/GenCode.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c.service.entity; 2 | 3 | import io.jboot.admin.base.gencode.model.AppModelGenerator; 4 | 5 | /** 6 | * 代码生成 7 | * @author Rlax 8 | * 9 | */ 10 | public class GenCode { 11 | 12 | public static void main(String[] args) { 13 | AppModelGenerator.doGenerate(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/GenCode.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity; 2 | 3 | import io.jboot.admin.base.gencode.model.AppModelGenerator; 4 | 5 | /** 6 | * 代码生成 7 | * @author Rlax 8 | * 9 | */ 10 | public class GenCode { 11 | 12 | public static void main(String[] args) { 13 | AppModelGenerator.doGenerate(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/model/Log.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.model; 2 | 3 | import io.jboot.db.annotation.Table; 4 | import io.jboot.admin.service.entity.model.base.BaseLog; 5 | 6 | /** 7 | * Generated by Jboot. 8 | */ 9 | @Table(tableName = "sys_log", primaryKey = "id") 10 | public class Log extends BaseLog { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/model/Res.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.model; 2 | 3 | import io.jboot.db.annotation.Table; 4 | import io.jboot.admin.service.entity.model.base.BaseRes; 5 | 6 | /** 7 | * Generated by Jboot. 8 | */ 9 | @Table(tableName = "sys_res", primaryKey = "id") 10 | public class Res extends BaseRes { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-api/src/main/java/io/jboot/admin/service/api/ge/GenCode.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.api.ge; 2 | 3 | import io.jboot.admin.base.gencode.service.AppServiceGenerator; 4 | 5 | /** 6 | * 代码生成 7 | * @author Rlax 8 | * 9 | */ 10 | public class GenCode { 11 | 12 | public static void main(String[] args) { 13 | AppServiceGenerator.doGenerate(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/model/Data.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.model; 2 | 3 | import io.jboot.db.annotation.Table; 4 | import io.jboot.admin.service.entity.model.base.BaseData; 5 | 6 | /** 7 | * Generated by Jboot. 8 | */ 9 | @Table(tableName = "sys_data", primaryKey = "id") 10 | public class Data extends BaseData { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/model/Role.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.model; 2 | 3 | import io.jboot.db.annotation.Table; 4 | import io.jboot.admin.service.entity.model.base.BaseRole; 5 | 6 | /** 7 | * Generated by Jboot. 8 | */ 9 | @Table(tableName = "sys_role", primaryKey = "id") 10 | public class Role extends BaseRole { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/model/User.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.model; 2 | 3 | import io.jboot.db.annotation.Table; 4 | import io.jboot.admin.service.entity.model.base.BaseUser; 5 | 6 | /** 7 | * Generated by Jboot. 8 | */ 9 | @Table(tableName = "sys_user", primaryKey = "id") 10 | public class User extends BaseUser { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/common/include/_js.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /doc/端口规划.txt: -------------------------------------------------------------------------------- 1 | 多机情况下:每台单实例,单机情况下在考虑端口分配 2 | jboot-admin:8888 3 | jboot-wechat:8899 4 | jboot-b2c:8879 5 | jboot-admin-service-provider:9001 6 | jboot-admin-service-provider-rpc:9011 7 | jboot-b2c-service-provider:9021 8 | jboot-b2c-service-provider-rpc:9031 9 | 10 | redis:6379-6399 11 | consul:8500-8599 12 | consul-dev:8500-8509 13 | consul-test:8510-8519 14 | motan-manager:7001 15 | hystrix-dashboard:7010 16 | zipkin:9411 17 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-entity/src/main/java/io/jboot/b2c/service/entity/model/Product.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c.service.entity.model; 2 | 3 | import io.jboot.db.annotation.Table; 4 | import io.jboot.b2c.service.entity.model.base.BaseProduct; 5 | 6 | /** 7 | * Generated by Jboot. 8 | */ 9 | @Table(tableName = "b2c_product", primaryKey = "id") 10 | public class Product extends BaseProduct { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/model/RoleRes.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.model; 2 | 3 | import io.jboot.db.annotation.Table; 4 | import io.jboot.admin.service.entity.model.base.BaseRoleRes; 5 | 6 | /** 7 | * Generated by Jboot. 8 | */ 9 | @Table(tableName = "sys_role_res", primaryKey = "id") 10 | public class RoleRes extends BaseRoleRes { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-provider/src/main/java/io/jboot/b2c/service/provider/ge/GenCode.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c.service.provider.ge; 2 | 3 | import io.jboot.admin.base.gencode.serviceimpl.AppServiceImplGenerator; 4 | 5 | /** 6 | * 代码生成 7 | * @author Rlax 8 | * 9 | */ 10 | public class GenCode { 11 | 12 | public static void main(String[] args) { 13 | AppServiceImplGenerator.doGenerate(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/model/UserRole.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.model; 2 | 3 | import io.jboot.db.annotation.Table; 4 | import io.jboot.admin.service.entity.model.base.BaseUserRole; 5 | 6 | /** 7 | * Generated by Jboot. 8 | */ 9 | @Table(tableName = "sys_user_role", primaryKey = "id") 10 | public class UserRole extends BaseUserRole { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/java/io/jboot/admin/service/provider/ge/GenCode.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.provider.ge; 2 | 3 | import io.jboot.admin.base.gencode.serviceimpl.AppServiceImplGenerator; 4 | 5 | /** 6 | * 代码生成 7 | * @author Rlax 8 | * 9 | */ 10 | public class GenCode { 11 | 12 | public static void main(String[] args) { 13 | AppServiceImplGenerator.doGenerate(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/interceptor/NotNullPara.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.interceptor; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 参数不为空 7 | * @author Rlax 8 | * 9 | */ 10 | @Documented 11 | @Target(ElementType.METHOD) 12 | @Inherited 13 | @Retention(RetentionPolicy.RUNTIME) 14 | public @interface NotNullPara { 15 | 16 | String[] value(); 17 | 18 | String errorRedirect() default ""; 19 | } 20 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/ResultCode.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | /** 4 | * 返回结果常量定义 5 | * @author Rlax 6 | * 7 | */ 8 | public class ResultCode { 9 | 10 | /** 成功 */ 11 | public final static String SUCCESS = "0"; 12 | 13 | /** 执行异常 */ 14 | public final static String ERROR = "1"; 15 | 16 | /** FALLBACK异常 */ 17 | public final static String FALLBACK_ERROR = "2"; 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/rule.txt: -------------------------------------------------------------------------------- 1 | 在创建竖向(二级)导航栏的json串时,文件名称统一为nav_main_加上横向导航栏对应的mark的值; 2 | 例如:横向导航栏的json串是: 3 | { 4 | "data": [ 5 | { 6 | "text": "商品管理", 7 | "icon": "", 8 | "mark": "1", 9 | "href": "demo/btn.html" 10 | },{ 11 | "text": "会员管理", 12 | "icon": "", 13 | "mark": "2", 14 | "href": "demo/btn.html" 15 | } 16 | ] 17 | } 18 | 19 | 这里的商品管理和会员管理分别对应一个json串文件,json串文件名称必须是:nav_main_1 和 nav_main_2 -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/ServiceConst.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | /** 4 | * 服务常量 5 | * @author Rlax 6 | * 7 | */ 8 | public final class ServiceConst { 9 | 10 | /** 系统服务 */ 11 | public final static String SERVICE_SYSTEM = "system-service"; 12 | /** b2c服务 */ 13 | public final static String SERVICE_B2C = "b2c-service"; 14 | 15 | 16 | /** 服务版本 */ 17 | public final static String VERSION_1_0 = "1.0"; 18 | /** 服务版本 */ 19 | public final static String VERSION_2_0 = "2.0"; 20 | } 21 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/welcome.html: -------------------------------------------------------------------------------- 1 | #include("/template/common/layout/_page_layout.html") 2 | #@layout() 3 | 4 | #define css() 5 | 8 | #end 9 | 10 | #define js() 11 | 12 | #end 13 | 14 | #define content() 15 |
16 |

欢迎登录

17 |
18 |

jboot-admin开源地址:欢迎star

19 |

gitee:https://gitee.com/rlaxuc/jboot-admin

20 |

github:https://github.com/pkanyue/jboot-admin

21 |
22 | 23 | #end -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/validator/LoginValidator.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.validator; 2 | 3 | import com.jfinal.core.Controller; 4 | import io.jboot.admin.base.web.base.JsonValidator; 5 | 6 | /** 7 | * 登录校验 8 | * @author Rlax 9 | * 10 | */ 11 | public class LoginValidator extends JsonValidator { 12 | 13 | @Override 14 | protected void validate(Controller c) { 15 | validateString("loginName", 4, 16, "用户名格式不正确"); 16 | validateString("password", 6, 16, "密码格式不正确"); 17 | validateString("capval", 4, 4, "验证码格式不正确"); 18 | validateCaptcha("capval", "验证码不正确"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | __ .______ ______ ______ .___________. ___ _______ .___ ___. __ .__ __. 2 | | | | _ \ / __ \ / __ \ | | / \ | \ | \/ | | | | \ | | 3 | | | | |_) | | | | | | | | | `---| |----` / ^ \ | .--. || \ / | | | | \| | 4 | .--. | | | _ < | | | | | | | | | | / /_\ \ | | | || |\/| | | | | . ` | 5 | | `--' | | |_) | | `--' | | `--' | | | / _____ \ | '--' || | | | | | | |\ | 6 | \______/ |______/ \______/ \______/ |__| /__/ \__\ |_______/ |__| |__| |__| |__| \__| 7 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | __ .______ ______ ______ .___________. ___ _______ .___ ___. __ .__ __. 2 | | | | _ \ / __ \ / __ \ | | / \ | \ | \/ | | | | \ | | 3 | | | | |_) | | | | | | | | | `---| |----` / ^ \ | .--. || \ / | | | | \| | 4 | .--. | | | _ < | | | | | | | | | | / /_\ \ | | | || |\/| | | | | . ` | 5 | | `--' | | |_) | | `--' | | `--' | | | / _____ \ | '--' || | | | | | | |\ | 6 | \______/ |______/ \______/ \______/ |__| /__/ \__\ |_______/ |__| |__| |__| |__| \__| 7 | -------------------------------------------------------------------------------- /jboot-wechat/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | __ .______ ______ ______ .___________. ___ _______ .___ ___. __ .__ __. 2 | | | | _ \ / __ \ / __ \ | | / \ | \ | \/ | | | | \ | | 3 | | | | |_) | | | | | | | | | `---| |----` / ^ \ | .--. || \ / | | | | \| | 4 | .--. | | | _ < | | | | | | | | | | / /_\ \ | | | || |\/| | | | | . ` | 5 | | `--' | | |_) | | `--' | | `--' | | | / _____ \ | '--' || | | | | | | |\ | 6 | \______/ |______/ \______/ \______/ |__| /__/ \__\ |_______/ |__| |__| |__| |__| \__| 7 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/web/render/AppRenderFactory.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.web.render; 2 | 3 | import com.jfinal.render.ErrorRender; 4 | import com.jfinal.render.Render; 5 | import io.jboot.web.render.JbootRenderFactory; 6 | 7 | /** 8 | * RenderFactory,覆盖jboot error render 9 | * @author Rlax 10 | * 11 | */ 12 | public class AppRenderFactory extends JbootRenderFactory { 13 | 14 | @Override 15 | public Render getRender(String view) { 16 | return super.getRender(view); 17 | } 18 | 19 | @Override 20 | public Render getErrorRender(int errorCode) { 21 | return new ErrorRender(errorCode, constants.getErrorView(errorCode)); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/exception/ExceptionLoader.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.exception; 2 | 3 | import io.jboot.exception.JbootException; 4 | 5 | /** 6 | * 异常信息获取类 7 | * @author Rlax 8 | * 9 | */ 10 | public class ExceptionLoader { 11 | 12 | public static String read(JbootException e) { 13 | String message = null; 14 | 15 | if (e.getClass() == BusinessException.class) { 16 | message = e.getMessage(); 17 | } else if (e.getCause() != null && e.getCause().getClass() == BusinessException.class) { 18 | message = e.getCause().getMessage(); 19 | } else { 20 | throw e; 21 | } 22 | 23 | return message; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/shiro/SessionHandler.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.shiro; 2 | 3 | import com.jfinal.handler.Handler; 4 | 5 | import javax.servlet.http.HttpServletRequest; 6 | import javax.servlet.http.HttpServletResponse; 7 | 8 | /** 9 | * 去除;jsessionid 10 | * @author Rlax 11 | * 12 | */ 13 | public class SessionHandler extends Handler 14 | { 15 | @Override 16 | public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) 17 | { 18 | int index = target.indexOf(";jsessionid".toUpperCase()); 19 | if (index != -1) { 20 | target = target.substring(0, index); 21 | } 22 | next.handle(target, request, response, isHandled); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-entity/src/main/java/io/jboot/b2c/service/entity/status/ProductStatus.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c.service.entity.status; 2 | 3 | import io.jboot.admin.base.common.BaseStatus; 4 | 5 | /** 6 | * 商品状态 7 | * @author Rlax 8 | * 9 | */ 10 | public class ProductStatus extends BaseStatus { 11 | 12 | public final static String UNUSED = "0"; 13 | public final static String USED = "1"; 14 | 15 | public ProductStatus() { 16 | add(UNUSED, "停用"); 17 | add(USED, "启用"); 18 | } 19 | 20 | private static ProductStatus me; 21 | 22 | public static ProductStatus me() { 23 | if (me == null) { 24 | me = new ProductStatus(); 25 | } 26 | return me; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/status/system/ResStatus.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.status.system; 2 | 3 | 4 | import io.jboot.admin.base.common.BaseStatus; 5 | 6 | /** 7 | * 系统资源状态类 8 | * @author Rlax 9 | * 10 | */ 11 | public class ResStatus extends BaseStatus { 12 | 13 | public final static String UNUSED = "0"; 14 | public final static String USED = "1"; 15 | 16 | public ResStatus() { 17 | add(UNUSED, "停用"); 18 | add(USED, "启用"); 19 | } 20 | 21 | private static ResStatus me; 22 | 23 | public static ResStatus me() { 24 | if (me == null) { 25 | me = new ResStatus(); 26 | } 27 | return me; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/status/system/RoleStatus.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.status.system; 2 | 3 | 4 | import io.jboot.admin.base.common.BaseStatus; 5 | 6 | /** 7 | * 系统角色状态类 8 | * @author Rlax 9 | * 10 | */ 11 | public class RoleStatus extends BaseStatus { 12 | 13 | public final static String UNUSED = "0"; 14 | public final static String USED = "1"; 15 | 16 | public RoleStatus() { 17 | add(UNUSED, "停用"); 18 | add(USED, "启用"); 19 | } 20 | 21 | private static RoleStatus me; 22 | 23 | public static RoleStatus me() { 24 | if (me == null) { 25 | me = new RoleStatus(); 26 | } 27 | return me; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/web/render/error/BaseErrorRender.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.web.render.error; 2 | 3 | import com.jfinal.render.Render; 4 | 5 | /** 6 | * 错误输出基类 7 | * @author Rlax 8 | * 9 | */ 10 | public abstract class BaseErrorRender extends Render { 11 | 12 | public BaseErrorRender(int errorCode, String errorMessage) { 13 | this.errorCode = errorCode; 14 | this.errorMessage = errorMessage; 15 | } 16 | 17 | /** 错误码 */ 18 | protected int errorCode; 19 | 20 | /** 错误异常内容 */ 21 | protected String errorMessage; 22 | 23 | public int getErrorCode() { 24 | return errorCode; 25 | } 26 | 27 | public String getErrorMessage() { 28 | return errorMessage; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/status/system/DataStatus.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.status.system; 2 | 3 | 4 | import io.jboot.admin.base.common.BaseStatus; 5 | 6 | /** 7 | * 系统资源状态类 8 | * @author Rlax 9 | * 10 | */ 11 | public class DataStatus extends BaseStatus { 12 | 13 | public final static String UNUSED = "0"; 14 | public final static String USED = "1"; 15 | 16 | public DataStatus() { 17 | add(UNUSED, "停用"); 18 | add(USED, "启用"); 19 | } 20 | 21 | private static DataStatus me; 22 | 23 | public static DataStatus me() { 24 | if (me == null) { 25 | me = new DataStatus(); 26 | } 27 | return me; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/common/layout/_page_layout.html: -------------------------------------------------------------------------------- 1 | #define layout() 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | #(APP_NAME) 13 | #include("../include/_css.html") 14 | #@css() 15 | 16 | 17 | #@content() 18 | 19 | #include("../include/_js.html") 20 | #@js() 21 | 22 | #end -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/jwt/shiro/JwtSubjectFactory.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.jwt.shiro; 2 | 3 | import org.apache.shiro.subject.Subject; 4 | import org.apache.shiro.subject.SubjectContext; 5 | import org.apache.shiro.web.mgt.DefaultWebSubjectFactory; 6 | 7 | /** 8 | * jwt 不创建 session 9 | * @author Rlax 10 | * 11 | */ 12 | public class JwtSubjectFactory extends DefaultWebSubjectFactory { 13 | 14 | @Override 15 | public Subject createSubject(SubjectContext context) { 16 | if (context.getAuthenticationToken() instanceof JwtAuthenticationToken) { 17 | // jwt 不创建 session 18 | context.setSessionCreationEnabled(false); 19 | } 20 | 21 | return super.createSubject(context); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/status/system/UserOnlineStatus.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.status.system; 2 | 3 | 4 | import io.jboot.admin.base.common.BaseStatus; 5 | 6 | /** 7 | * 系统用户在线状态类 8 | * @author Rlax 9 | * 10 | */ 11 | public class UserOnlineStatus extends BaseStatus { 12 | 13 | public final static String OFFLINE = "0"; 14 | public final static String ONLINE = "1"; 15 | 16 | public UserOnlineStatus() { 17 | add(OFFLINE, "离线"); 18 | add(ONLINE, "在线"); 19 | } 20 | 21 | private static UserOnlineStatus me; 22 | 23 | public static UserOnlineStatus me() { 24 | if (me == null) { 25 | me = new UserOnlineStatus(); 26 | } 27 | return me; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/exception/SystemException.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.exception; 2 | 3 | import io.jboot.exception.JbootException; 4 | 5 | /** 6 | * 系统异常 7 | * @author Rlax 8 | * 9 | */ 10 | public class SystemException extends JbootException { 11 | 12 | public SystemException() { 13 | super(); 14 | } 15 | 16 | public SystemException(String message) { 17 | super(message); 18 | } 19 | 20 | public SystemException(String message, Throwable cause) { 21 | super(message, cause); 22 | } 23 | 24 | public SystemException(Throwable cause) { 25 | super(cause); 26 | } 27 | 28 | protected SystemException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 29 | super(message, cause, enableSuppression, writableStackTrace); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /jboot-b2c-service/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | jboot-admin-parent 7 | io.jboot.admin 8 | 1.0 9 | 10 | 4.0.0 11 | 12 | jboot-b2c-service 13 | pom 14 | 15 | 16 | jboot-b2c-service-api 17 | jboot-b2c-service-entity 18 | jboot-b2c-service-provider 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-provider/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | __ .______ ______ ______ .___________. ___ _______ .___ ___. __ .__ __. 2 | | | | _ \ / __ \ / __ \ | | / \ | \ | \/ | | | | \ | | 3 | | | | |_) | | | | | | | | | `---| |----` / ^ \ | .--. || \ / | | | | \| | 4 | .--. | | | _ < | | | | | | | | | | / /_\ \ | | | || |\/| | | | | . ` | 5 | | `--' | | |_) | | `--' | | `--' | | | / _____ \ | '--' || | | | | | | |\ | 6 | \______/ |______/ \______/ \______/ |__| /__/ \__\ |_______/ |__| |__| |__| |__| \__| 7 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/exception/BusinessException.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.exception; 2 | 3 | import io.jboot.exception.JbootException; 4 | 5 | /** 6 | * 业务异常 7 | * @author Rlax 8 | * 9 | */ 10 | public class BusinessException extends JbootException { 11 | 12 | public BusinessException() { 13 | super(); 14 | } 15 | 16 | public BusinessException(String message) { 17 | super(message); 18 | } 19 | 20 | public BusinessException(String message, Throwable cause) { 21 | super(message, cause); 22 | } 23 | 24 | public BusinessException(Throwable cause) { 25 | super(cause); 26 | } 27 | 28 | protected BusinessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 29 | super(message, cause, enableSuppression, writableStackTrace); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | __ .______ ______ ______ .___________. ___ _______ .___ ___. __ .__ __. 2 | | | | _ \ / __ \ / __ \ | | / \ | \ | \/ | | | | \ | | 3 | | | | |_) | | | | | | | | | `---| |----` / ^ \ | .--. || \ / | | | | \| | 4 | .--. | | | _ < | | | | | | | | | | / /_\ \ | | | || |\/| | | | | . ` | 5 | | `--' | | |_) | | `--' | | `--' | | | / _____ \ | '--' || | | | | | | |\ | 6 | \______/ |______/ \______/ \______/ |__| /__/ \__\ |_______/ |__| |__| |__| |__| \__| 7 | -------------------------------------------------------------------------------- /jboot-admin-service/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | jboot-admin-parent 7 | io.jboot.admin 8 | 1.0 9 | 10 | 4.0.0 11 | 12 | jboot-admin-service 13 | pom 14 | 15 | 16 | jboot-admin-service-api 17 | jboot-admin-service-entity 18 | jboot-admin-service-provider 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/exception/ValidatorException.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.exception; 2 | 3 | import io.jboot.exception.JbootException; 4 | 5 | /** 6 | * 校验异常 7 | * @author Rlax 8 | * 9 | */ 10 | public class ValidatorException extends JbootException { 11 | 12 | public ValidatorException() { 13 | super(); 14 | } 15 | 16 | public ValidatorException(String message) { 17 | super(message); 18 | } 19 | 20 | public ValidatorException(String message, Throwable cause) { 21 | super(message, cause); 22 | } 23 | 24 | public ValidatorException(Throwable cause) { 25 | super(cause); 26 | } 27 | 28 | protected ValidatorException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 29 | super(message, cause, enableSuppression, writableStackTrace); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/status/system/UserStatus.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.status.system; 2 | 3 | import io.jboot.admin.base.common.BaseStatus; 4 | 5 | /** 6 | * 系统用户状态类 7 | * @author Rlax 8 | * 9 | */ 10 | public class UserStatus extends BaseStatus { 11 | 12 | public final static String REGISTER = "0"; 13 | public final static String USED = "1"; 14 | public final static String LOCKED = "2"; 15 | 16 | public UserStatus() { 17 | add(REGISTER, "注册"); 18 | add(USED, "在用"); 19 | add(LOCKED, "锁定"); 20 | } 21 | 22 | private static UserStatus me; 23 | 24 | public static UserStatus me() { 25 | if (me == null) { 26 | me = new UserStatus(); 27 | } 28 | return me; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/shiro/CharacterEncodingFilter.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.shiro; 2 | 3 | import com.jfinal.core.Const; 4 | import org.apache.shiro.web.servlet.OncePerRequestFilter; 5 | 6 | import javax.servlet.FilterChain; 7 | import javax.servlet.ServletException; 8 | import javax.servlet.ServletRequest; 9 | import javax.servlet.ServletResponse; 10 | import java.io.IOException; 11 | 12 | 13 | /** 14 | * shiro 编码过滤器 15 | * @author Rlax 16 | * 17 | */ 18 | public class CharacterEncodingFilter extends OncePerRequestFilter { 19 | @Override 20 | protected void doFilterInternal(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 21 | request.setCharacterEncoding(Const.DEFAULT_ENCODING); 22 | chain.doFilter(request, response); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/shiro/cache/ShiroCacheManager.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.shiro.cache; 2 | 3 | import org.apache.shiro.cache.Cache; 4 | import org.apache.shiro.cache.CacheException; 5 | import org.apache.shiro.cache.CacheManager; 6 | 7 | import java.util.concurrent.ConcurrentHashMap; 8 | import java.util.concurrent.ConcurrentMap; 9 | 10 | /** 11 | * 封装shiro manager 扩展使用 redis/ehcache 12 | * @author Rlax 13 | * 14 | */ 15 | public class ShiroCacheManager implements CacheManager { 16 | 17 | private final ConcurrentMap caches = new ConcurrentHashMap(); 18 | 19 | @Override 20 | public Cache getCache(String name) throws CacheException { 21 | Cache c = caches.get(name); 22 | if (c == null) { 23 | c = new ShiroCache(name); 24 | caches.put(name, c); 25 | } 26 | return c; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/shiro.ini: -------------------------------------------------------------------------------- 1 | #不用spring的时候可以用这个 2 | [main] 3 | 4 | #cache Manager 5 | shiroCacheManager = io.jboot.component.shiro.cache.JbootShiroCacheManager 6 | securityManager.cacheManager = $shiroCacheManager 7 | 8 | #realm 9 | dbRealm=io.jboot.b2c.support.JwtAuthorizingRealm 10 | dbRealm.authorizationCacheName=shiro-authorizationCache 11 | 12 | securityManager.realm=$dbRealm 13 | 14 | #session manager 15 | sessionManager=org.apache.shiro.session.mgt.DefaultSessionManager 16 | sessionManager.sessionValidationSchedulerEnabled=false 17 | 18 | #use jwt 19 | subjectFactory=io.jboot.admin.base.plugin.jwt.shiro.JwtSubjectFactory 20 | securityManager.subjectFactory=$subjectFactory 21 | securityManager.sessionManager=$sessionManager 22 | 23 | #session storage false 24 | securityManager.subjectDAO.sessionStorageEvaluator.sessionStorageEnabled=false 25 | 26 | shiro.loginUrl =/login 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/Consts.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | /** 4 | * 常量 5 | * @author Rlax 6 | * 7 | */ 8 | public class Consts 9 | { 10 | /** session 用户信息key */ 11 | public static final String SESSION_USER = "user"; 12 | /** session 用户角色key */ 13 | public static final String SESSION_USER_ROLE = "userRole"; 14 | public static final String SESSION_EAMIL_USER="email_val"; 15 | public static final String SESSION_MESSAGE = "_message"; 16 | /** 短信session值 */ 17 | public static final String SESSION_SMS = "_sms_val"; 18 | 19 | /** 微信授权 token 存储在 session 里 对应的 key */ 20 | public static final String WEIXIN_SESSION_CODE = "weixin_code"; 21 | 22 | public static final int PAGE_DEFAULT_SIZE = 10; 23 | 24 | /** 定位当前菜单功能标识 */ 25 | public static final String FUNC_TAG = "_func"; 26 | 27 | /** 表单token 防止重复提交 */ 28 | public static final String TOKEN_TAG = "_token"; 29 | 30 | 31 | } 32 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-entity/src/main/resources/jboot.properties: -------------------------------------------------------------------------------- 1 | jboot.datasource.type=mysql 2 | jboot.datasource.url=jdbc:mysql://127.0.0.1:3306/jboot-b2c?characterEncoding=utf8&useSSL=true 3 | jboot.datasource.user=root 4 | jboot.datasource.password=root 5 | 6 | #---------------------------------------------------------------------------------# 7 | # Generator Config 8 | # jboot.admin.model.ge.entity.package: the entity package; 9 | # jboot.admin.model.ge.localdev.removedtablenameprefixes: 需要移除表名前缀只留下后部分,多个逗号隔开 10 | # jboot.admin.model.ge.localdev.excludedtable: 生成时不包含表名列表,多个逗号隔开 11 | # jboot.admin.model.ge.excludedtableprefixes: 生成时不包含表前缀,多个逗号隔开 12 | #---------------------------------------------------------------------------------# 13 | jboot.admin.model.ge.modelpackage=io.jboot.b2c.service.entity.model 14 | jboot.admin.model.ge.removedtablenameprefixes=b2c_ 15 | jboot.admin.model.ge.excludedtable= 16 | jboot.admin.model.ge.excludedtableprefixes=temp_,v_ -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/resources/jboot.properties: -------------------------------------------------------------------------------- 1 | jboot.datasource.type=mysql 2 | jboot.datasource.url=jdbc:mysql://127.0.0.1:3306/jboot-admin?characterEncoding=utf8&useSSL=true 3 | jboot.datasource.user=root 4 | jboot.datasource.password=root 5 | 6 | #---------------------------------------------------------------------------------# 7 | # Generator Config 8 | # jboot.admin.model.ge.entity.package: the entity package; 9 | # jboot.admin.model.ge.localdev.removedtablenameprefixes: 需要移除表名前缀只留下后部分,多个逗号隔开 10 | # jboot.admin.model.ge.localdev.excludedtable: 生成时不包含表名列表,多个逗号隔开 11 | # jboot.admin.model.ge.excludedtableprefixes: 生成时不包含表前缀,多个逗号隔开 12 | #---------------------------------------------------------------------------------# 13 | jboot.admin.model.ge.modelpackage=io.jboot.admin.service.entity.model 14 | jboot.admin.model.ge.removedtablenameprefixes=sys_ 15 | jboot.admin.model.ge.excludedtable= 16 | jboot.admin.model.ge.excludedtableprefixes=temp_,v_ -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/java/io/jboot/admin/service/provider/RoleResServiceImpl.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.provider; 2 | 3 | import com.jfinal.plugin.activerecord.Db; 4 | import io.jboot.aop.annotation.Bean; 5 | import io.jboot.admin.service.api.RoleResService; 6 | import io.jboot.admin.service.entity.model.RoleRes; 7 | import io.jboot.core.rpc.annotation.JbootrpcService; 8 | import io.jboot.service.JbootServiceBase; 9 | 10 | import javax.inject.Singleton; 11 | import java.util.List; 12 | 13 | @Bean 14 | @Singleton 15 | @JbootrpcService 16 | public class RoleResServiceImpl extends JbootServiceBase implements RoleResService { 17 | 18 | @Override 19 | public int deleteByRoleId(Long roleId) { 20 | return Db.update("delete from sys_role_res where role_id = ?", roleId); 21 | } 22 | 23 | @Override 24 | public int[] batchSave(List list) { 25 | return Db.batchSave(list, list.size()); 26 | } 27 | } -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/java/io/jboot/admin/service/provider/UserRoleServiceImpl.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.provider; 2 | 3 | import com.jfinal.plugin.activerecord.Db; 4 | import io.jboot.aop.annotation.Bean; 5 | import io.jboot.admin.service.api.UserRoleService; 6 | import io.jboot.admin.service.entity.model.UserRole; 7 | import io.jboot.core.rpc.annotation.JbootrpcService; 8 | import io.jboot.service.JbootServiceBase; 9 | 10 | import javax.inject.Singleton; 11 | import java.util.List; 12 | 13 | @Bean 14 | @Singleton 15 | @JbootrpcService 16 | public class UserRoleServiceImpl extends JbootServiceBase implements UserRoleService { 17 | 18 | @Override 19 | public int deleteByUserId(Long userId) { 20 | return Db.update("delete from sys_user_role where user_id = ?", userId); 21 | } 22 | 23 | @Override 24 | public int[] batchSave(List list) { 25 | return Db.batchSave(list, list.size()); 26 | } 27 | } -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/model/base/BaseRoleRes.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.model.base; 2 | 3 | import io.jboot.db.model.JbootModel; 4 | import com.jfinal.plugin.activerecord.IBean; 5 | 6 | /** 7 | * Generated by Jboot, do not modify this file. 8 | */ 9 | @SuppressWarnings("serial") 10 | public abstract class BaseRoleRes> extends JbootModel implements IBean { 11 | 12 | public void setId(java.lang.Long id) { 13 | set("id", id); 14 | } 15 | 16 | public java.lang.Long getId() { 17 | return getLong("id"); 18 | } 19 | 20 | public void setResId(java.lang.Long resId) { 21 | set("res_id", resId); 22 | } 23 | 24 | public java.lang.Long getResId() { 25 | return getLong("res_id"); 26 | } 27 | 28 | public void setRoleId(java.lang.Long roleId) { 29 | set("role_id", roleId); 30 | } 31 | 32 | public java.lang.Long getRoleId() { 33 | return getLong("role_id"); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/jwt/shiro/JwtAuthenticationToken.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.jwt.shiro; 2 | 3 | import org.apache.shiro.authc.AuthenticationToken; 4 | 5 | /** 6 | * jwt shiro token 7 | * @author Rlax 8 | * 9 | */ 10 | public class JwtAuthenticationToken implements AuthenticationToken { 11 | 12 | /** 用户id */ 13 | private String userId; 14 | 15 | /** token */ 16 | private String token; 17 | 18 | public JwtAuthenticationToken(String userId, String token) { 19 | this.userId = userId; 20 | this.token = token; 21 | } 22 | 23 | @Override 24 | public Object getPrincipal() { 25 | return userId; 26 | } 27 | 28 | @Override 29 | public Object getCredentials() { 30 | return token; 31 | } 32 | 33 | public void setUserId(String userId) { 34 | this.userId = userId; 35 | } 36 | 37 | public void setToken(String token) { 38 | this.token = token; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/src/main/java/io/jboot/admin/service/entity/model/base/BaseUserRole.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.entity.model.base; 2 | 3 | import io.jboot.db.model.JbootModel; 4 | import com.jfinal.plugin.activerecord.IBean; 5 | 6 | /** 7 | * Generated by Jboot, do not modify this file. 8 | */ 9 | @SuppressWarnings("serial") 10 | public abstract class BaseUserRole> extends JbootModel implements IBean { 11 | 12 | public void setId(java.lang.Long id) { 13 | set("id", id); 14 | } 15 | 16 | public java.lang.Long getId() { 17 | return getLong("id"); 18 | } 19 | 20 | public void setUserId(java.lang.Long userId) { 21 | set("user_id", userId); 22 | } 23 | 24 | public java.lang.Long getUserId() { 25 | return getLong("user_id"); 26 | } 27 | 28 | public void setRoleId(java.lang.Long roleId) { 29 | set("role_id", roleId); 30 | } 31 | 32 | public java.lang.Long getRoleId() { 33 | return getLong("role_id"); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/captcha/CaptchaCache.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.captcha; 2 | 3 | import com.jfinal.captcha.Captcha; 4 | import com.jfinal.captcha.ICaptchaCache; 5 | import io.jboot.Jboot; 6 | import io.jboot.admin.base.common.CacheKey; 7 | 8 | /** 9 | * 验证码 redis 集群 10 | * @author Rlax 11 | * 12 | */ 13 | public class CaptchaCache implements ICaptchaCache { 14 | 15 | @Override 16 | public void put(Captcha captcha) { 17 | Jboot.me().getCache().put(CacheKey.CACHE_CAPTCHAR_SESSION, captcha.getKey(), captcha, (int) (captcha.getExpireAt() - System.currentTimeMillis()) / 1000); 18 | } 19 | 20 | @Override 21 | public Captcha get(String key) { 22 | return Jboot.me().getCache().get(CacheKey.CACHE_CAPTCHAR_SESSION, key); 23 | } 24 | 25 | @Override 26 | public void remove(String key) { 27 | Jboot.me().getCache().remove(CacheKey.CACHE_CAPTCHAR_SESSION, key); 28 | } 29 | 30 | @Override 31 | public void removeAll() { 32 | Jboot.me().getCache().removeAll(CacheKey.CACHE_CAPTCHAR_SESSION); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/shiro/WebSessionListener.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.shiro; 2 | 3 | import org.apache.shiro.session.Session; 4 | import org.apache.shiro.session.SessionListenerAdapter; 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | 8 | /** 9 | * session 监听 10 | * @author Rlax 11 | * 12 | */ 13 | public class WebSessionListener extends SessionListenerAdapter { 14 | 15 | private final static Logger logger = LoggerFactory.getLogger(WebSessionListener.class); 16 | 17 | @Override 18 | public void onExpiration(Session session) { 19 | logger.info("onExpiration session {}" + session); 20 | super.onExpiration(session); 21 | } 22 | 23 | @Override 24 | public void onStart(Session session) { 25 | logger.info("onStart session {}" + session); 26 | super.onStart(session); 27 | } 28 | 29 | @Override 30 | public void onStop(Session session) { 31 | logger.info("onStop session {}" + session); 32 | super.onStop(session); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/web/render/error/JsonErrorRender.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.web.render.error; 2 | 3 | import com.jfinal.render.RenderException; 4 | 5 | import java.io.IOException; 6 | import java.io.PrintWriter; 7 | 8 | /** 9 | * Json异常Render 10 | * @author Rlax 11 | * 12 | */ 13 | public class JsonErrorRender extends BaseErrorRender { 14 | 15 | public JsonErrorRender(int errorCode, String errorMessage) { 16 | super(errorCode, errorMessage); 17 | } 18 | 19 | @Override 20 | public void render() { 21 | response.setStatus(getErrorCode()); 22 | 23 | PrintWriter writer = null; 24 | try { 25 | response.setContentType(""); 26 | writer = response.getWriter(); 27 | writer.write(""); 28 | writer.flush(); 29 | } catch (IOException e) { 30 | throw new RenderException(e); 31 | } finally { 32 | if (writer != null) { 33 | writer.close(); 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/BaseStatus.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | import java.util.LinkedHashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * 状态基类 8 | * @author Rlax 9 | * 10 | */ 11 | public abstract class BaseStatus { 12 | 13 | private Map map = new LinkedHashMap(); 14 | 15 | /** 16 | * 添加状态 17 | * @param key 18 | * @param desc 19 | */ 20 | public void add(String key, String desc) { 21 | map.put(key, desc); 22 | } 23 | 24 | /** 25 | * 根据key返回描述 26 | * @param key 27 | * @return 28 | */ 29 | public String desc(String key) { 30 | return map.get(key); 31 | } 32 | 33 | /** 34 | * 根据描述返回key 35 | * @param desc 36 | * @return 37 | */ 38 | public String key(String desc) { 39 | for (String _key : map.keySet()) { 40 | if (desc.equals(map.get(_key))) { 41 | return _key; 42 | } 43 | } 44 | 45 | return null; 46 | } 47 | 48 | /** 49 | * 返回全部状态 50 | * @return 51 | */ 52 | public Map all() { 53 | return map; 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-api/src/main/resources/jboot.properties: -------------------------------------------------------------------------------- 1 | jboot.datasource.type=mysql 2 | jboot.datasource.url=jdbc:mysql://127.0.0.1:3306/jboot-b2c?characterEncoding=utf8&useSSL=true 3 | jboot.datasource.user=root 4 | jboot.datasource.password=root 5 | 6 | #---------------------------------------------------------------------------------# 7 | # Generator Config 8 | # jboot.admin.service.ge.entity.package: the entity package; 9 | # jboot.admin.service.ge.servicepackage:service 接口 package 10 | # jboot.admin.service.ge.localdev.removedtablenameprefixes: 需要移除表名前缀只留下后部分,多个逗号隔开 11 | # jboot.admin.service.ge.localdev.excludedtable: 生成时不包含表名列表,多个逗号隔开 12 | # jboot.admin.service.ge.excludedtableprefixes: 生成时不包含表前缀,多个逗号隔开 13 | #---------------------------------------------------------------------------------# 14 | jboot.admin.service.ge.modelpackage=io.jboot.b2c.service.entity.model 15 | jboot.admin.service.ge.servicepackage=io.jboot.b2c.service.api 16 | jboot.admin.service.ge.removedtablenameprefixes=b2c_ 17 | jboot.admin.service.ge.excludedtable= 18 | jboot.admin.service.ge.excludedtableprefixes=temp_,v_ -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-provider/src/main/java/io/jboot/b2c/service/provider/ProductServiceImpl.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c.service.provider; 2 | 3 | import com.jfinal.kit.StrKit; 4 | import com.jfinal.plugin.activerecord.Page; 5 | import io.jboot.aop.annotation.Bean; 6 | import io.jboot.b2c.service.api.ProductService; 7 | import io.jboot.b2c.service.entity.model.Product; 8 | import io.jboot.core.rpc.annotation.JbootrpcService; 9 | import io.jboot.db.model.Columns; 10 | import io.jboot.service.JbootServiceBase; 11 | 12 | import javax.inject.Singleton; 13 | 14 | @Bean 15 | @Singleton 16 | @JbootrpcService 17 | public class ProductServiceImpl extends JbootServiceBase implements ProductService { 18 | 19 | @Override 20 | public Page findPage(Product product, int pageNumber, int pageSize) { 21 | Columns columns = Columns.create(); 22 | 23 | if (StrKit.notBlank(product.getName())) { 24 | columns.like("name", "%"+product.getName()+"%"); 25 | } 26 | return DAO.paginateByColumns(pageNumber, pageSize, columns.getList(), "id desc"); 27 | } 28 | } -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/shiro/MuitiLoginToken.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.shiro; 2 | 3 | import org.apache.shiro.authc.UsernamePasswordToken; 4 | 5 | /** 6 | * 多用途登录 token 支持用户名/密码 与 app token 登录模式 如需添加其他模式,请在对应Realm中实现对应认证策略 7 | *
当为token 模式时候,token 传入到 password 属性中 8 | * @author Rlax 9 | * 10 | */ 11 | public class MuitiLoginToken extends UsernamePasswordToken { 12 | 13 | private static final long serialVersionUID = 13810646381777514L; 14 | 15 | /** 用户名密码登录模式 */ 16 | public final static String USERPASSWORD_MODE = "userpassword_mode"; 17 | /** token登录模式 */ 18 | public final static String TOKEN_MODE = "token_mode"; 19 | 20 | /** 21 | * 登录类型 默认为用户名密码登录模式 22 | */ 23 | private String loginType = USERPASSWORD_MODE; 24 | 25 | public String getLoginType() { 26 | return this.loginType; 27 | } 28 | 29 | public void setLoginType(String loginType) { 30 | this.loginType = loginType; 31 | } 32 | 33 | /** 34 | * 构造方法 35 | */ 36 | public MuitiLoginToken(String username, String password) { 37 | super(username, password); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-api/src/main/resources/jboot.properties: -------------------------------------------------------------------------------- 1 | jboot.datasource.type=mysql 2 | jboot.datasource.url=jdbc:mysql://127.0.0.1:3306/jboot-admin?characterEncoding=utf8&useSSL=true 3 | jboot.datasource.user=root 4 | jboot.datasource.password=root 5 | 6 | #---------------------------------------------------------------------------------# 7 | # Generator Config 8 | # jboot.admin.service.ge.entity.package: the entity package; 9 | # jboot.admin.service.ge.servicepackage:service 接口 package 10 | # jboot.admin.service.ge.localdev.removedtablenameprefixes: 需要移除表名前缀只留下后部分,多个逗号隔开 11 | # jboot.admin.service.ge.localdev.excludedtable: 生成时不包含表名列表,多个逗号隔开 12 | # jboot.admin.service.ge.excludedtableprefixes: 生成时不包含表前缀,多个逗号隔开 13 | #---------------------------------------------------------------------------------# 14 | jboot.admin.service.ge.modelpackage=io.jboot.admin.service.entity.model 15 | jboot.admin.service.ge.servicepackage=io.jboot.admin.service.api 16 | jboot.admin.service.ge.removedtablenameprefixes=sys_ 17 | jboot.admin.service.ge.excludedtable= 18 | jboot.admin.service.ge.excludedtableprefixes=temp_,v_ -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/ErrorResult.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 错误返回 7 | * @author Rlax 8 | * 9 | */ 10 | public class ErrorResult implements Serializable { 11 | 12 | public final static Integer NORMAL_ERROR = 0; 13 | public final static Integer VALIDATOR_ERROR = 1; 14 | public final static Integer BUSINESS_ERROR = 2; 15 | public final static Integer FALL_BACK_ERROR = 100; 16 | public final static Integer SYSTEM_ERROR = 500; 17 | 18 | private Integer code; 19 | private String msg; 20 | 21 | public ErrorResult() { 22 | 23 | } 24 | 25 | public ErrorResult(Integer code, String msg) { 26 | this.code = code; 27 | this.msg = msg; 28 | } 29 | 30 | public Integer getCode() { 31 | return code; 32 | } 33 | 34 | public void setCode(Integer code) { 35 | this.code = code; 36 | } 37 | 38 | public String getMsg() { 39 | return msg; 40 | } 41 | 42 | public void setMsg(String msg) { 43 | this.msg = msg; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/validator/system/ChangePwdValidator.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.validator.system; 2 | 3 | import com.jfinal.core.Controller; 4 | import io.jboot.admin.base.web.base.JsonValidator; 5 | import io.jboot.admin.service.entity.model.User; 6 | import io.jboot.admin.support.auth.AuthUtils; 7 | 8 | 9 | /** 10 | * 修改密码校验器 11 | * @author Rlax 12 | * 13 | */ 14 | public class ChangePwdValidator extends JsonValidator { 15 | 16 | @Override 17 | protected void validate(Controller c) { 18 | String pwd = c.getPara("user.pwd"); 19 | String newPwd = c.getPara("newPwd"); 20 | String rePwd = c.getPara("rePwd"); 21 | 22 | validateRequiredString("user.pwd", "旧密码不能为空"); 23 | validateRequiredString("newPwd", "新密码不能为空"); 24 | validateRequiredString("rePwd", "确认密码不能为空"); 25 | 26 | if(!newPwd.equals(rePwd)){ 27 | addError("两次输入密码不一致,请重新输入!"); 28 | } 29 | 30 | User user = AuthUtils.getLoginUser(); 31 | 32 | if(!AuthUtils.checkPwd(pwd, user.getPwd(), user.getSalt2())){ 33 | addError("原密码不正确!"); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /jboot-wechat/src/main/java/io/jboot/wechat/controller/wechat/WeixinMsgController.java: -------------------------------------------------------------------------------- 1 | package io.jboot.wechat.controller.wechat; 2 | 3 | import com.jfinal.weixin.sdk.jfinal.MsgControllerAdapter; 4 | import com.jfinal.weixin.sdk.msg.in.InTextMsg; 5 | import com.jfinal.weixin.sdk.msg.in.event.InFollowEvent; 6 | import com.jfinal.weixin.sdk.msg.in.event.InMenuEvent; 7 | import com.jfinal.weixin.sdk.msg.out.OutTextMsg; 8 | import io.jboot.web.controller.annotation.RequestMapping; 9 | 10 | @RequestMapping("/wechat/msg") 11 | public class WeixinMsgController extends MsgControllerAdapter { 12 | 13 | /** 14 | * 处理接收到的关注/取消关注事件 15 | */ 16 | @Override 17 | protected void processInFollowEvent(InFollowEvent inFollowEvent) { 18 | OutTextMsg outMsg = new OutTextMsg(inFollowEvent); 19 | outMsg.setContent("欢迎关注!"); 20 | render(outMsg); 21 | } 22 | 23 | @Override 24 | protected void processInTextMsg(InTextMsg inTextMsg) { 25 | renderOutTextMsg("感谢您的关注!小编已经收到您的消息,并将尽快通过微信与您取得联系。"); 26 | } 27 | 28 | @Override 29 | protected void processInMenuEvent(InMenuEvent inMenuEvent) { 30 | 31 | } 32 | 33 | } 34 | 35 | -------------------------------------------------------------------------------- /jboot-wechat/src/main/java/io/jboot/wechat/controller/wechat/UserController.java: -------------------------------------------------------------------------------- 1 | package io.jboot.wechat.controller.wechat; 2 | 3 | import com.jfinal.kit.JsonKit; 4 | import com.jfinal.weixin.sdk.api.ApiResult; 5 | import io.jboot.web.controller.annotation.RequestMapping; 6 | import io.jboot.wechat.controller.JbootWechatController; 7 | 8 | /** 9 | * 10 | * @author Rlax 11 | * 12 | */ 13 | @RequestMapping("/wechat/user") 14 | public class UserController extends JbootWechatController { 15 | 16 | /** 17 | * index 18 | */ 19 | public void index() { 20 | String userJson = (String) getSessionAttr(SESSION_WECHAT_USER_JSON); 21 | System.out.println(userJson); 22 | renderJson(userJson); 23 | } 24 | 25 | @Override 26 | public Object doGetUserByOpenId(String openid) { 27 | // 根据自己需求扩展,可以根据openId 得到内部用户 28 | System.out.println(openid); 29 | return null; 30 | } 31 | 32 | @Override 33 | public Object doSaveOrUpdateUserByApiResult(ApiResult apiResult) { 34 | // 根据自己需求扩展,比如保存微信用户信息,与内部用户做关联 35 | System.out.println(JsonKit.toJson(apiResult)); 36 | return apiResult; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/support/auth/AuthUtils.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.support.auth; 2 | 3 | import io.jboot.admin.base.common.Consts; 4 | import io.jboot.admin.base.plugin.shiro.ShiroUtils; 5 | import io.jboot.admin.service.entity.model.User; 6 | import org.apache.shiro.SecurityUtils; 7 | 8 | /** 9 | * 授权认证工具类 10 | */ 11 | public class AuthUtils { 12 | 13 | /** 14 | * 是否登录 15 | * @return 16 | */ 17 | public static boolean isLogin() { 18 | return ShiroUtils.isAuthenticated(); 19 | } 20 | 21 | /** 22 | * 获取平台登录用户 23 | * @return 24 | */ 25 | public static User getLoginUser() { 26 | User user = new User(); 27 | if (ShiroUtils.isAuthenticated()) { 28 | user = (User) SecurityUtils.getSubject().getSession().getAttribute(Consts.SESSION_USER); 29 | } 30 | return user; 31 | } 32 | 33 | /** 34 | * 校验用户登录密码 35 | * @param newPwd 新未加密的密码 36 | * @param oldPwd 旧加密后的密码 37 | * @param oldSalt2 旧加密盐 38 | * @return true-校验一致 否则 false 39 | */ 40 | public static boolean checkPwd(String newPwd, String oldPwd, String oldSalt2) { 41 | return ShiroUtils.checkPwd(newPwd, oldPwd, oldSalt2); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/rest/datatable/DataTable.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.rest.datatable; 2 | 3 | import com.jfinal.plugin.activerecord.Page; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * layui 数据表格 9 | * @author Rlax 10 | * 11 | */ 12 | public class DataTable { 13 | 14 | private int code = 0; 15 | private String msg; 16 | private int count; 17 | 18 | private List data; 19 | 20 | public DataTable() {} 21 | 22 | public DataTable(Page page) { 23 | this.count = page.getTotalRow(); 24 | this.data = page.getList(); 25 | } 26 | 27 | public int getCode() { 28 | return code; 29 | } 30 | 31 | public void setCode(int code) { 32 | this.code = code; 33 | } 34 | 35 | public String getMsg() { 36 | return msg; 37 | } 38 | 39 | public void setMsg(String msg) { 40 | this.msg = msg; 41 | } 42 | 43 | public int getCount() { 44 | return count; 45 | } 46 | 47 | public void setCount(int count) { 48 | this.count = count; 49 | } 50 | 51 | public List getData() { 52 | return data; 53 | } 54 | 55 | public void setData(List data) { 56 | this.data = data; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/shiro/auth/MuitiAuthenticatied.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.shiro.auth; 2 | 3 | import org.apache.shiro.authc.AuthenticationInfo; 4 | import org.apache.shiro.authc.AuthenticationToken; 5 | import org.apache.shiro.authz.AuthorizationInfo; 6 | import org.apache.shiro.subject.PrincipalCollection; 7 | 8 | /** 9 | * 多用途认证器,针对不同认证方式提供公共接口,实现对应接口即可 10 | * @author Rlax 11 | * 12 | */ 13 | public interface MuitiAuthenticatied { 14 | 15 | /** 16 | * token 是否存在,如果不存在将抛出异常 17 | * @param authenticationToken 认证token 18 | * @return 存在则返回 true 19 | */ 20 | public boolean hasToken(AuthenticationToken authenticationToken); 21 | 22 | /** 23 | * token 是否被锁定,如果锁定将抛出异常 24 | * @param authenticationToken 25 | * @return 锁定则返回true 26 | */ 27 | public boolean wasLocked(AuthenticationToken authenticationToken); 28 | 29 | /** 30 | * 构建认证信息,提供shiro进行认证 31 | * @param authenticationToken 32 | * @return 33 | */ 34 | public AuthenticationInfo buildAuthenticationInfo(AuthenticationToken authenticationToken); 35 | 36 | /** 37 | * 构建授权信息 38 | * @param principals 39 | * @return 40 | */ 41 | public AuthorizationInfo buildAuthorizationInfo(PrincipalCollection principals); 42 | } 43 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | jboot-b2c-service 7 | io.jboot.admin 8 | 1.0 9 | 10 | 4.0.0 11 | 12 | jboot-b2c-service-api 13 | jar 14 | 15 | 16 | 17 | io.jboot.admin 18 | jboot-b2c-service-entity 19 | 1.0 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.apache.maven.plugins 27 | maven-compiler-plugin 28 | 29 | 1.8 30 | 1.8 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-entity/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | jboot-b2c-service 7 | io.jboot.admin 8 | 1.0 9 | 10 | 4.0.0 11 | 12 | jboot-b2c-service-entity 13 | jar 14 | 15 | 16 | 17 | io.jboot.admin 18 | jboot-admin-base 19 | 1.0 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.apache.maven.plugins 27 | maven-compiler-plugin 28 | 29 | 1.8 30 | 1.8 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/shiro/SessionDAO.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.shiro; 2 | 3 | import org.apache.shiro.cache.CacheManager; 4 | import org.apache.shiro.session.Session; 5 | import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO; 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | 9 | import java.io.Serializable; 10 | 11 | /*** 12 | * 集成会话管理 13 | * 14 | * @author Rlax 15 | * 16 | */ 17 | public class SessionDAO extends EnterpriseCacheSessionDAO { 18 | 19 | private static final Logger logger = LoggerFactory.getLogger(SessionDAO.class); 20 | 21 | public static SessionDAO me; 22 | 23 | @Override 24 | public void setCacheManager(CacheManager cacheManager) { 25 | super.setCacheManager(cacheManager); 26 | me = this; 27 | } 28 | 29 | @Override 30 | protected Serializable doCreate(Session session) { 31 | Serializable id = super.doCreate(session); 32 | return id; 33 | } 34 | 35 | @Override 36 | protected Session doReadSession(Serializable sessionId) { 37 | return super.doReadSession(sessionId); 38 | } 39 | 40 | @Override 41 | protected void doUpdate(Session session) { 42 | super.doUpdate(session); 43 | } 44 | 45 | @Override 46 | protected void doDelete(Session session) { 47 | super.doDelete(session); 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | jboot-admin-service 7 | io.jboot.admin 8 | 1.0 9 | 10 | 4.0.0 11 | 12 | jboot-admin-service-api 13 | jar 14 | 15 | 16 | 17 | io.jboot.admin 18 | jboot-admin-service-entity 19 | 1.0 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.apache.maven.plugins 27 | maven-compiler-plugin 28 | 29 | 1.8 30 | 1.8 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-entity/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | jboot-admin-service 7 | io.jboot.admin 8 | 1.0 9 | 10 | 4.0.0 11 | 12 | jboot-admin-service-entity 13 | jar 14 | 15 | 16 | 17 | io.jboot.admin 18 | jboot-admin-base 19 | 1.0 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.apache.maven.plugins 27 | maven-compiler-plugin 28 | 29 | 1.8 30 | 1.8 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/CacheKey.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | /** 4 | * 缓存目录 KEY 5 | * @author Rlax 6 | * 7 | */ 8 | public class CacheKey { 9 | 10 | /** 基础数据 对应 data 表 keyValue缓存在cache的name */ 11 | public static final String CACHE_KEYVALUE = "keyValue"; 12 | 13 | /** 页面数据缓存 */ 14 | public static final String CACHE_PAGE = "pageCache"; 15 | 16 | /** 30分钟缓存 */ 17 | public static final String CACHE_H1M30 = "h1m30"; 18 | 19 | /** 导航目录缓存 */ 20 | public static final String CACHE_MENU = "menuCache"; 21 | 22 | /** shiro 授权缓存 */ 23 | public static final String CACHE_SHIRO_AUTH = "shiro-authorizationCache"; 24 | 25 | /** shiro session在线缓存 */ 26 | public static final String CACHE_SHIRO_ACTIVESESSION = "shiro-active-session"; 27 | 28 | /** shiro session踢出缓存 */ 29 | public static final String CACHE_SHIRO_KICKOUTSESSION = "shiro-kickout-session"; 30 | 31 | /** shiro 密码重试缓存 */ 32 | public static final String CACHE_SHIRO_PASSWORDRETRY = "shiro-passwordRetryCache"; 33 | 34 | /** shiro SESSION KEY 缓存 */ 35 | public static final String CACHE_SHIRO_SESSION = "shiro-session"; 36 | 37 | /** 验证码 缓存 */ 38 | public static final String CACHE_CAPTCHAR_SESSION = "captchar-cache"; 39 | 40 | /** jwt_token */ 41 | public static final String CACHE_JWT_TOKEN = "jwt_token"; 42 | } 43 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/interceptor/BusinessExceptionInterceptor.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.interceptor; 2 | 3 | import com.jfinal.aop.Interceptor; 4 | import com.jfinal.aop.Invocation; 5 | import io.jboot.admin.base.common.RestResult; 6 | import io.jboot.exception.JbootException; 7 | import io.jboot.web.controller.JbootController; 8 | 9 | /** 10 | * 业务异常拦截器 11 | * @author Rlax 12 | * 13 | */ 14 | public class BusinessExceptionInterceptor implements Interceptor { 15 | 16 | /** 异常内容在模版引擎中的属性TAG */ 17 | public final static String MESSAGE_TAG = "message"; 18 | 19 | /** 异常页面 */ 20 | private String exceptionView = "/exception.html"; 21 | 22 | public BusinessExceptionInterceptor(String exceptionView) { 23 | this.exceptionView = exceptionView; 24 | } 25 | 26 | @Override 27 | public void intercept(Invocation inv) { 28 | try { 29 | inv.invoke(); 30 | } catch (JbootException e) { 31 | if (inv.getTarget() instanceof JbootController) { 32 | JbootController controller = inv.getTarget(); 33 | 34 | if (controller.isAjaxRequest()) { 35 | RestResult restResult = new RestResult(); 36 | restResult.error(e.getMessage()); 37 | controller.renderJson(restResult); 38 | } else { 39 | controller.setAttr(MESSAGE_TAG, e.getMessage()).render(exceptionView); 40 | } 41 | } 42 | } 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/controller/system/LogController.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.controller.system; 2 | 3 | import com.jfinal.plugin.activerecord.Page; 4 | import io.jboot.admin.base.rest.datatable.DataTable; 5 | import io.jboot.admin.base.web.base.BaseController; 6 | import io.jboot.admin.service.api.LogService; 7 | import io.jboot.admin.service.entity.model.Log; 8 | import io.jboot.core.rpc.annotation.JbootrpcService; 9 | import io.jboot.web.controller.annotation.RequestMapping; 10 | 11 | /** 12 | * 日志管理 13 | * @author Rlax 14 | * 15 | */ 16 | @RequestMapping("/system/log") 17 | public class LogController extends BaseController { 18 | 19 | @JbootrpcService 20 | private LogService logService; 21 | 22 | /** 23 | * index 24 | */ 25 | public void index() { 26 | render("main.html"); 27 | } 28 | 29 | /** 30 | * 表格数据 31 | */ 32 | public void tableData() { 33 | int pageNumber = getParaToInt("pageNumber", 1); 34 | int pageSize = getParaToInt("pageSize", 30); 35 | 36 | Log log = new Log(); 37 | log.setIp(getPara("ip")); 38 | log.setUrl(getPara("url")); 39 | log.setLastUpdAcct(getPara("userName")); 40 | 41 | Page logPage = logService.findPage(log, pageNumber, pageSize); 42 | renderJson(new DataTable(logPage)); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/shiro/ShiroCacheUtils.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.shiro; 2 | 3 | import io.jboot.admin.base.common.CacheKey; 4 | import org.apache.shiro.cache.Cache; 5 | import org.apache.shiro.cache.CacheManager; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * ShiroCache工具类 11 | * @author Rlax 12 | * 13 | */ 14 | public class ShiroCacheUtils 15 | { 16 | private static CacheManager cacheManager; 17 | 18 | /** 19 | * 清除用户的授权信息 20 | * 21 | * @param username 22 | */ 23 | public static void clearAuthorizationInfo(String username) 24 | { 25 | Cache cache = cacheManager.getCache(CacheKey.CACHE_SHIRO_AUTH); 26 | cache.remove(username); 27 | } 28 | 29 | public static void clearAuthorizationInfoAll() 30 | { 31 | Cache cache = cacheManager.getCache(CacheKey.CACHE_SHIRO_AUTH); 32 | cache.clear(); 33 | } 34 | 35 | /** 36 | * 清除session(认证信息) 37 | * 38 | * @param sessionId 39 | */ 40 | public static void clearSession(Serializable sessionId) 41 | { 42 | Cache cache = cacheManager.getCache(CacheKey.CACHE_SHIRO_ACTIVESESSION); 43 | cache.remove(sessionId); 44 | } 45 | 46 | public static CacheManager getCacheManager() 47 | { 48 | return cacheManager; 49 | } 50 | 51 | public static void setCacheManager(CacheManager cacheManager) 52 | { 53 | ShiroCacheUtils.cacheManager = cacheManager; 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/validator/system/ResValidator.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.validator.system; 2 | 3 | import com.jfinal.core.Controller; 4 | import io.jboot.admin.base.web.base.JsonValidator; 5 | 6 | /** 7 | * 系统资源校验器 8 | * @author Rlax 9 | * 10 | */ 11 | public class ResValidator extends JsonValidator { 12 | 13 | @Override 14 | protected void validate(Controller c) { 15 | String methodName = getActionMethod().getName(); 16 | if ("postAdd".equals(methodName)) { 17 | validateRequiredString("pid", "父资源编码为空"); 18 | validateRequiredString("res.name", "资源名称为空"); 19 | validateRequiredString("res.url", "资源URL为空"); 20 | validateRequiredString("res.des", "资源描述为空"); 21 | validateRequiredString("res.type", "资源类型为空"); 22 | validateRequiredString("res.seq", "排序号为空"); 23 | validateRequiredString("res.status", "资源状态为空"); 24 | } else if ("postUpdate".equals(methodName)) { 25 | validateRequiredString("pid", "父资源编码为空"); 26 | validateRequiredString("res.name", "资源名称为空"); 27 | validateRequiredString("res.url", "资源URL为空"); 28 | validateRequiredString("res.des", "资源描述为空"); 29 | validateRequiredString("res.type", "资源类型为空"); 30 | validateRequiredString("res.seq", "排序号为空"); 31 | validateRequiredString("res.status", "资源状态为空"); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/java/io/jboot/admin/service/provider/LogServiceImpl.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.service.provider; 2 | 3 | import com.jfinal.kit.StrKit; 4 | import com.jfinal.plugin.activerecord.Page; 5 | import io.jboot.admin.service.api.UserService; 6 | import io.jboot.aop.annotation.Bean; 7 | import io.jboot.admin.service.api.LogService; 8 | import io.jboot.admin.service.entity.model.Log; 9 | import io.jboot.core.rpc.annotation.JbootrpcService; 10 | import io.jboot.db.model.Columns; 11 | import io.jboot.service.JbootServiceBase; 12 | 13 | import javax.inject.Inject; 14 | import javax.inject.Singleton; 15 | 16 | @Bean 17 | @Singleton 18 | @JbootrpcService 19 | public class LogServiceImpl extends JbootServiceBase implements LogService { 20 | 21 | @Inject 22 | private UserService userService; 23 | 24 | @Override 25 | public Page findPage(Log log, int pageNumber, int pageSize) { 26 | Columns columns = Columns.create(); 27 | 28 | if (StrKit.notBlank(log.getIp())) { 29 | columns.like("ip", "%"+log.getIp()+"%"); 30 | } 31 | if (StrKit.notBlank(log.getUrl())) { 32 | columns.like("url", "%"+log.getUrl()+"%"); 33 | } 34 | if (StrKit.notBlank(log.getLastUpdAcct())) { 35 | columns.like("lastUpdAcct", "%"+log.getLastUpdAcct()+"%"); 36 | } 37 | 38 | return DAO.paginateByColumns(pageNumber, pageSize, columns.getList(), "id desc"); 39 | } 40 | } -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/rpc/motan/FstMotanSerialization.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.rpc.motan; 2 | 3 | import com.weibo.api.motan.codec.Serialization; 4 | import com.weibo.api.motan.core.extension.SpiMeta; 5 | import org.nustaq.serialization.FSTConfiguration; 6 | 7 | import java.io.IOException; 8 | 9 | /** 10 | * Motan 序列化,替代hessian,有 BigDecimal BUG 11 | * @author Rlax 12 | * 13 | */ 14 | @SpiMeta(name = "fst") 15 | public class FstMotanSerialization implements Serialization { 16 | 17 | private static FSTConfiguration fst = FSTConfiguration.createDefaultConfiguration(); 18 | 19 | @Override 20 | public byte[] serialize(Object obj) throws IOException { 21 | if (obj == null) { 22 | return null; 23 | } 24 | return fst.asByteArray(obj); 25 | } 26 | 27 | @Override 28 | public T deserialize(byte[] bytes, Class clz) throws IOException { 29 | if (bytes == null || bytes.length == 0) { 30 | return null; 31 | } 32 | return (T) fst.asObject(bytes); 33 | } 34 | 35 | @Override 36 | public byte[] serializeMulti(Object[] data) throws IOException { 37 | return serialize(data); 38 | } 39 | 40 | @Override 41 | public Object[] deserializeMulti(byte[] data, Class[] classes) throws IOException { 42 | return (Object[]) fst.asObject(data); 43 | } 44 | 45 | @Override 46 | public int getSerializationNumber() { 47 | return 0; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/MenuItem.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 菜单实体 7 | * 8 | * @author Rlax 9 | * 10 | */ 11 | public class MenuItem { 12 | 13 | /** 菜单标题 */ 14 | private String text; 15 | /** 菜单图标 */ 16 | private String icon; 17 | /** 链接 */ 18 | private String href; 19 | /** id */ 20 | private Long mark; 21 | 22 | private List subset; 23 | 24 | public MenuItem(String text, String icon, String href, Long mark) { 25 | this.text = text; 26 | this.icon = icon; 27 | this.href = href; 28 | this.mark = mark; 29 | } 30 | 31 | public String getText() { 32 | return text; 33 | } 34 | 35 | public void setText(String text) { 36 | this.text = text; 37 | } 38 | 39 | public String getIcon() { 40 | return icon; 41 | } 42 | 43 | public void setIcon(String icon) { 44 | this.icon = icon; 45 | } 46 | 47 | public String getHref() { 48 | return href; 49 | } 50 | 51 | public void setHref(String href) { 52 | this.href = href; 53 | } 54 | 55 | public List getSubset() { 56 | return subset; 57 | } 58 | 59 | public void setSubset(List subset) { 60 | this.subset = subset; 61 | } 62 | 63 | public Long getMark() { 64 | return mark; 65 | } 66 | 67 | public void setMark(Long mark) { 68 | this.mark = mark; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /doc/sql/jboot-b2c.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Navicat MySQL Data Transfer 3 | 4 | Source Server : root 5 | Source Server Version : 50553 6 | Source Host : localhost:3306 7 | Source Database : jboot-b2c 8 | 9 | Target Server Type : MYSQL 10 | Target Server Version : 50553 11 | File Encoding : 65001 12 | 13 | Date: 2018-01-23 12:12:26 14 | */ 15 | 16 | SET FOREIGN_KEY_CHECKS=0; 17 | 18 | -- ---------------------------- 19 | -- Table structure for b2c_product 20 | -- ---------------------------- 21 | DROP TABLE IF EXISTS `b2c_product`; 22 | CREATE TABLE `b2c_product` ( 23 | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID', 24 | `name` varchar(40) DEFAULT NULL COMMENT '商品名称', 25 | `prodDesc` varchar(200) DEFAULT NULL COMMENT '商品详情', 26 | `totalNum` int(11) DEFAULT NULL COMMENT '总库存', 27 | `orderedNum` int(11) DEFAULT NULL COMMENT '订出量', 28 | `status` varchar(8) DEFAULT NULL COMMENT '状态', 29 | `createDate` datetime DEFAULT NULL COMMENT '创建时间', 30 | `lastUpdAcct` varchar(20) DEFAULT NULL COMMENT '最新更新人', 31 | `lastUpdTime` datetime DEFAULT NULL COMMENT '最新更新时间', 32 | `note` varchar(200) DEFAULT NULL COMMENT '备注', 33 | PRIMARY KEY (`id`) 34 | ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='商品表'; 35 | 36 | -- ---------------------------- 37 | -- Records of b2c_product 38 | -- ---------------------------- 39 | INSERT INTO `b2c_product` VALUES ('1', '小米 mix2', '全面屏手机', '100', null, '1', '2018-01-23 12:07:47', 'admin', '2018-01-23 12:07:47', '新增商品'); 40 | INSERT INTO `b2c_product` VALUES ('2', 'iphone x', 'hello,未来.现 RMB 8,388 起售.立刻购买可享免息分期.免费送货与退货.', '300', null, '1', '2018-01-23 12:11:31', 'admin', '2018-01-23 12:11:31', '新增商品'); 41 | -------------------------------------------------------------------------------- /jboot-admin-service/jboot-admin-service-provider/src/main/resources/sql/system/sysRes.sql: -------------------------------------------------------------------------------- 1 | #sql("findByUserNameAndStatusUsed") 2 | SELECT 3 | DISTINCT a.* 4 | FROM 5 | sys_res a, 6 | sys_role b, 7 | sys_role_res c, 8 | sys_user d, 9 | sys_user_role e 10 | WHERE 11 | a.id = c.res_id 12 | AND b.id = c.role_id 13 | AND d.id = e.user_id 14 | and e.role_id = b.id 15 | AND a.`status` = ? 16 | AND b.`status` = ? 17 | and d.`name` = ? 18 | #end 19 | 20 | #sql("findTopMenuByUserName") 21 | SELECT 22 | a.* 23 | FROM 24 | sys_res a, 25 | sys_role b, 26 | sys_role_res c, 27 | sys_user d, 28 | sys_user_role e 29 | WHERE 30 | a.id = c.res_id 31 | AND b.id = c.role_id 32 | AND d.id = e.user_id 33 | and e.role_id = b.id 34 | AND a.`status` = ? 35 | AND b.`status` = ? 36 | and a.pid = ? 37 | and d.`name` = ? 38 | ORDER BY a.pid asc, a.seq asc 39 | #end 40 | 41 | #sql("findLeftMenuByUserNameAndPid") 42 | SELECT 43 | a.* 44 | FROM 45 | sys_res a, 46 | sys_role b, 47 | sys_role_res c, 48 | sys_user d, 49 | sys_user_role e 50 | WHERE 51 | a.id = c.res_id 52 | AND b.id = c.role_id 53 | AND d.id = e.user_id 54 | and e.role_id = b.id 55 | AND a.`status` = ? 56 | AND b.`status` = ? 57 | AND FIND_IN_SET(a.id, querySysRes(?)) 58 | AND d.`name` = ? 59 | ORDER BY a.pid asc, a.seq asc 60 | #end 61 | 62 | #sql("findByRoleIdAndStatusUsed") 63 | SELECT 64 | res.* 65 | FROM 66 | sys_res res, 67 | sys_role_res role_res, 68 | sys_role role 69 | WHERE 70 | role_res.res_id = res.id 71 | AND role.id = role_res.role_id 72 | AND res. STATUS = ? 73 | AND role. STATUS = ? 74 | AND ROLE.id = ? 75 | AND res.url IS NOT NULL 76 | ORDER BY res.pid asc, res.seq asc 77 | #end -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/support/auth/AuthInterceptor.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.support.auth; 2 | 3 | import com.jfinal.aop.Interceptor; 4 | import com.jfinal.aop.Invocation; 5 | import io.jboot.Jboot; 6 | import io.jboot.admin.service.api.ResService; 7 | import io.jboot.admin.service.entity.model.Res; 8 | import io.jboot.admin.service.entity.status.system.ResStatus; 9 | import org.apache.shiro.SecurityUtils; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | /** 15 | * 根据url的权限拦截器,具有url权限的角色才允许访问 16 | * @author Rlax 17 | * 18 | */ 19 | public class AuthInterceptor implements Interceptor { 20 | 21 | /** 22 | * 获取全部 需要控制的权限 23 | */ 24 | private static List urls; 25 | 26 | public AuthInterceptor() { 27 | 28 | } 29 | 30 | public static List getUrls() { 31 | return urls; 32 | } 33 | 34 | public static void init() { 35 | ResService sysResApi = Jboot.service(ResService.class); 36 | List sysResList = sysResApi.findByStatus(ResStatus.USED); 37 | List list = new ArrayList(); 38 | for (Res res : sysResList) { 39 | list.add(res.getUrl()); 40 | } 41 | urls = list; 42 | } 43 | 44 | @Override 45 | public void intercept(Invocation ai) { 46 | if (urls == null) { 47 | init(); 48 | } 49 | 50 | String url = ai.getActionKey(); 51 | boolean flag = SecurityUtils.getSubject() != null && SecurityUtils.getSubject().isPermitted(url); 52 | 53 | if (urls.contains(url) && !flag) { 54 | ai.getController().renderError(403); 55 | } else { 56 | ai.invoke(); 57 | } 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/gencode/model/AppMetaBuilder.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.gencode.model; 2 | 3 | import com.jfinal.plugin.activerecord.dialect.OracleDialect; 4 | import com.jfinal.plugin.activerecord.generator.MetaBuilder; 5 | import com.jfinal.plugin.activerecord.generator.TableMeta; 6 | 7 | import javax.sql.DataSource; 8 | import java.sql.ResultSet; 9 | import java.sql.SQLException; 10 | 11 | /** 12 | * 自定义 MetaBuilder,处理表前缀跳过生成 13 | * @author Rlax 14 | * 15 | */ 16 | public class AppMetaBuilder extends MetaBuilder { 17 | /** 18 | * 需要跳过生成的表前缀 19 | */ 20 | private String[] skipPre = null; 21 | 22 | public AppMetaBuilder(DataSource dataSource) { 23 | super(dataSource); 24 | } 25 | 26 | @Override 27 | protected boolean isSkipTable(String tableName) { 28 | for (String skip : skipPre) { 29 | if (tableName.startsWith(skip)) { 30 | return true; 31 | } 32 | } 33 | return false; 34 | } 35 | 36 | public void setSkipPre(String... skipPre) { 37 | this.skipPre = skipPre; 38 | } 39 | 40 | @Override 41 | protected ResultSet getTablesResultSet() throws SQLException { 42 | String schemaPattern = dialect instanceof OracleDialect ? dbMeta.getUserName() : null; 43 | return dbMeta.getTables(conn.getCatalog(), schemaPattern, null, new String[]{"TABLE", "VIEW"}); 44 | } 45 | 46 | @Override 47 | protected void buildPrimaryKey(TableMeta tableMeta) throws SQLException { 48 | if (tableMeta.name.toLowerCase().endsWith("_view")) { 49 | tableMeta.primaryKey = "id"; 50 | } else { 51 | super.buildPrimaryKey(tableMeta); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/AppInfo.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | import io.jboot.config.annotation.PropertyConfig; 4 | 5 | /** 6 | * 应用信息 7 | * @author Rlax 8 | * 9 | */ 10 | @PropertyConfig(prefix = "jboot.admin.app") 11 | public class AppInfo { 12 | 13 | private String name; 14 | private String org; 15 | private String orgWebsite; 16 | private String resourceHost; 17 | private String copyRight; 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public void setName(String name) { 24 | this.name = name; 25 | } 26 | 27 | public String getOrg() { 28 | return org; 29 | } 30 | 31 | public void setOrg(String org) { 32 | this.org = org; 33 | } 34 | 35 | public String getOrgWebsite() { 36 | return orgWebsite; 37 | } 38 | 39 | public void setOrgWebsite(String orgWebsite) { 40 | this.orgWebsite = orgWebsite; 41 | } 42 | 43 | public String getResourceHost() { 44 | return resourceHost; 45 | } 46 | 47 | public void setResourceHost(String resourceHost) { 48 | this.resourceHost = resourceHost; 49 | } 50 | 51 | public String getCopyRight() { 52 | return copyRight; 53 | } 54 | 55 | public void setCopyRight(String copyRight) { 56 | this.copyRight = copyRight; 57 | } 58 | 59 | @Override 60 | public String toString() { 61 | return "AppInfo{" + 62 | "name='" + name + '\'' + 63 | ", org='" + org + '\'' + 64 | ", orgWebsite='" + orgWebsite + '\'' + 65 | ", resourceHost='" + resourceHost + '\'' + 66 | ", copyRight='" + copyRight + '\'' + 67 | '}'; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/support/enjoy/directive/StatusTplDirective.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.support.enjoy.directive; 2 | 3 | import com.jfinal.template.Env; 4 | import com.jfinal.template.io.Writer; 5 | import com.jfinal.template.stat.ParseException; 6 | import com.jfinal.template.stat.Scope; 7 | import io.jboot.admin.base.common.BaseStatus; 8 | import io.jboot.web.directive.annotation.JFinalDirective; 9 | import io.jboot.web.directive.base.JbootDirectiveBase; 10 | 11 | /** 12 | * 状态layui模版,状态数据desc 13 | * @author Rlax 14 | * 15 | */ 16 | @JFinalDirective("statusTpl") 17 | public class StatusTplDirective extends JbootDirectiveBase { 18 | 19 | /** 状态类全路径 例如:com.AbcStatus */ 20 | private BaseStatus status; 21 | /** 属性名默认status,laytpl 里 d.attrName */ 22 | private String attrName; 23 | 24 | @Override 25 | public void exec(Env env, Scope scope, Writer writer) { 26 | if (exprList.length() > 2) { 27 | throw new ParseException("Wrong number parameter of #date directive, two parameters allowed at most", location); 28 | } 29 | 30 | status = getParam(0, scope); 31 | if (status == null) { 32 | throw new ParseException("status is null", location); 33 | } 34 | 35 | if (exprList.length() > 1) { 36 | attrName = getParam(1, "status", scope); 37 | } 38 | 39 | write(writer, "
"); 40 | for (String key : status.all().keySet()) { 41 | write(writer, "{{# if(d." + attrName + " == \\'" + key + "\\') { }}"); 42 | write(writer, status.desc(key)); 43 | write(writer, "{{# } }}"); 44 | } 45 | write(writer, "
"); 46 | } 47 | 48 | @Override 49 | public void onRender(Env env, Scope scope, Writer writer) { 50 | 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/ZTree.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | /** 4 | * ztree 基本model 5 | * 6 | * @author Rlax 7 | * 8 | */ 9 | public class ZTree implements java.io.Serializable { 10 | 11 | private static final long serialVersionUID = 6625307952110627894L; 12 | private Long id; 13 | private Long pId; 14 | private String name; 15 | private boolean open = true; 16 | private boolean checked = false; 17 | private boolean chkDisabled = false; 18 | 19 | public ZTree(Long id, String name, Long pid) { 20 | this.id = id; 21 | this.name = name; 22 | this.pId = pid; 23 | } 24 | 25 | public void setDisCheck(boolean b) { 26 | if (b) { 27 | checked = true; 28 | chkDisabled = true; 29 | } else { 30 | chkDisabled = false; 31 | checked = false; 32 | } 33 | } 34 | 35 | /** 36 | * 选取 37 | */ 38 | public void checked() { 39 | this.checked = true; 40 | } 41 | 42 | public Long getId() { 43 | return id; 44 | } 45 | 46 | public void setId(Long id) { 47 | this.id = id; 48 | } 49 | 50 | public Long getpId() { 51 | return pId; 52 | } 53 | 54 | public void setpId(Long pId) { 55 | this.pId = pId; 56 | } 57 | 58 | public String getName() { 59 | return name; 60 | } 61 | 62 | public void setName(String name) { 63 | this.name = name; 64 | } 65 | 66 | public boolean isOpen() { 67 | return open; 68 | } 69 | 70 | public void setOpen(boolean open) { 71 | this.open = open; 72 | } 73 | 74 | public boolean isChecked() { 75 | return checked; 76 | } 77 | 78 | public void setChecked(boolean checked) { 79 | this.checked = checked; 80 | } 81 | 82 | public boolean isChkDisabled() { 83 | return chkDisabled; 84 | } 85 | 86 | public void setChkDisabled(boolean chkDisabled) { 87 | this.chkDisabled = chkDisabled; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/shiro/ShiroDbRealm.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.shiro; 2 | 3 | import io.jboot.admin.base.plugin.shiro.auth.MuitiAuthenticatied; 4 | import org.apache.shiro.authc.*; 5 | import org.apache.shiro.authz.AuthorizationInfo; 6 | import org.apache.shiro.cache.CacheManager; 7 | import org.apache.shiro.realm.AuthorizingRealm; 8 | import org.apache.shiro.subject.PrincipalCollection; 9 | 10 | /** 11 | * ShiroDbRealm 12 | * @author Rlax 13 | * 14 | */ 15 | public class ShiroDbRealm extends AuthorizingRealm { 16 | 17 | /** 18 | * 认证器 19 | */ 20 | private MuitiAuthenticatied muitiAuthenticatied; 21 | 22 | @Override 23 | public void setCacheManager(CacheManager cacheManager) { 24 | super.setCacheManager(cacheManager); 25 | ShiroCacheUtils.setCacheManager(cacheManager); 26 | } 27 | 28 | /** 29 | * 认证回调函数,登录时调用. 30 | */ 31 | @Override 32 | protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException { 33 | if (!muitiAuthenticatied.hasToken(authcToken)) { 34 | /** 无认证信息 */ 35 | throw new UnknownAccountException(); 36 | } 37 | 38 | if (muitiAuthenticatied.wasLocked(authcToken)) { 39 | /** 认证被锁定 */ 40 | throw new LockedAccountException(); 41 | } 42 | 43 | return muitiAuthenticatied.buildAuthenticationInfo(authcToken); 44 | } 45 | 46 | @Override 47 | protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { 48 | return muitiAuthenticatied.buildAuthorizationInfo(principals); 49 | } 50 | 51 | 52 | public MuitiAuthenticatied getMuitiAuthenticatied() { 53 | return muitiAuthenticatied; 54 | } 55 | 56 | public void setMuitiAuthenticatied(MuitiAuthenticatied muitiAuthenticatied) { 57 | this.muitiAuthenticatied = muitiAuthenticatied; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/support/enjoy/directive/OptionStatusDirective.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.support.enjoy.directive; 2 | 3 | import com.jfinal.template.Env; 4 | import com.jfinal.template.stat.ParseException; 5 | import com.jfinal.template.stat.Scope; 6 | import io.jboot.admin.base.common.BaseStatus; 7 | import io.jboot.web.directive.annotation.JFinalDirective; 8 | import io.jboot.web.directive.base.JbootDirectiveBase; 9 | 10 | import com.jfinal.template.io.Writer; 11 | 12 | /** 13 | * 状态下拉Option指令 14 | * @author Rlax 15 | * 16 | */ 17 | @JFinalDirective("statusOption") 18 | public class OptionStatusDirective extends JbootDirectiveBase { 19 | 20 | /** 状态类全路径 例如:com.AbcStatus */ 21 | private BaseStatus status; 22 | private String value; 23 | 24 | @Override 25 | public void exec(Env env, Scope scope, Writer writer) { 26 | if (exprList.length() > 2) { 27 | throw new ParseException("Wrong number parameter of #date directive, two parameters allowed at most", location); 28 | } 29 | 30 | status = getParam(0, scope); 31 | if (status == null) { 32 | throw new ParseException("status is null", location); 33 | } 34 | 35 | if (exprList.length() > 1) { 36 | value = getParam(1, "", scope); 37 | } 38 | 39 | for (String key : status.all().keySet()) { 40 | if (value != null && key.equals(value)) { 41 | write(writer, ""); 42 | } else { 43 | write(writer, ""); 44 | } 45 | } 46 | } 47 | 48 | @Override 49 | public void onRender(Env env, Scope scope, Writer writer) { 50 | 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /jboot-b2c/src/main/java/io/jboot/b2c/support/JwtAuthorizingRealm.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c.support; 2 | 3 | import io.jboot.Jboot; 4 | import io.jboot.admin.base.common.CacheKey; 5 | import io.jboot.admin.base.plugin.jwt.shiro.JwtAuthenticationToken; 6 | import io.jboot.admin.base.plugin.shiro.ShiroCacheUtils; 7 | import io.jboot.utils.StrUtils; 8 | import org.apache.shiro.authc.*; 9 | import org.apache.shiro.authz.AuthorizationInfo; 10 | import org.apache.shiro.cache.CacheManager; 11 | import org.apache.shiro.realm.AuthorizingRealm; 12 | import org.apache.shiro.subject.PrincipalCollection; 13 | 14 | /** 15 | * JwtAuthorizingRealm 16 | * @author Rlax 17 | * 18 | */ 19 | public class JwtAuthorizingRealm extends AuthorizingRealm { 20 | 21 | @Override 22 | public boolean supports(AuthenticationToken token) { 23 | return token instanceof JwtAuthenticationToken; 24 | } 25 | 26 | @Override 27 | public void setCacheManager(CacheManager cacheManager) { 28 | super.setCacheManager(cacheManager); 29 | ShiroCacheUtils.setCacheManager(cacheManager); 30 | } 31 | 32 | @Override 33 | protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { 34 | JwtAuthenticationToken jwtToken = (JwtAuthenticationToken) token; 35 | String uid = (String) jwtToken.getPrincipal(); 36 | 37 | String uidCache = Jboot.me().getCache().get(CacheKey.CACHE_JWT_TOKEN, uid); 38 | if (StrUtils.isNotBlank(uidCache)) { 39 | /** 说明改 token 已被加入黑名单 */ 40 | throw new UnknownAccountException(); 41 | } 42 | 43 | return new SimpleAuthenticationInfo(uid, jwtToken.getCredentials(), this.getName()); 44 | } 45 | 46 | @Override 47 | protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { 48 | return null; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/java/io/jboot/b2c/controller/MainController.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c.controller; 2 | 3 | import com.jfinal.kit.Ret; 4 | import io.jboot.Jboot; 5 | import io.jboot.admin.base.common.CacheKey; 6 | import io.jboot.admin.base.common.RestResult; 7 | import io.jboot.admin.base.exception.BusinessException; 8 | import io.jboot.admin.base.interceptor.NotNullPara; 9 | import io.jboot.admin.base.web.base.BaseController; 10 | import io.jboot.web.controller.annotation.RequestMapping; 11 | import org.apache.shiro.authz.annotation.RequiresAuthentication; 12 | 13 | 14 | /** 15 | * 主控制器 16 | * @author Rlax 17 | * 18 | */ 19 | @RequestMapping("/") 20 | public class MainController extends BaseController { 21 | 22 | @RequiresAuthentication 23 | public void index() { 24 | renderJson(RestResult.buildSuccess(Ret.create("userId", getJwtPara("userId")))); 25 | } 26 | 27 | /** 28 | * 调转登录页面 29 | */ 30 | public void login() { 31 | 32 | } 33 | 34 | /** 35 | * 登录 基于 jwt 36 | */ 37 | @NotNullPara({"loginName", "pwd"}) 38 | public void postLogin(String loginName, String pwd) { 39 | 40 | // 此处为 demo , 实际项目这里应该调用service 判断 41 | if ("user1".equals(loginName) && "123123".equals(pwd)) { 42 | String userId = "user1"; 43 | 44 | // 登录成功移除用户退出标识 45 | Jboot.me().getCache().remove(CacheKey.CACHE_JWT_TOKEN, userId); 46 | setJwtAttr("userId", userId); 47 | } else { 48 | throw new BusinessException("用户名密码错误"); 49 | } 50 | 51 | renderJson(RestResult.buildSuccess("登录成功")); 52 | } 53 | 54 | @RequiresAuthentication 55 | public void logout() { 56 | // 退出后将 jwt 加入黑名单 57 | Jboot.me().getCache().put(CacheKey.CACHE_JWT_TOKEN, getJwtPara("userId"), getJwtPara("userId"), 2 * 60 * 60); 58 | renderJson(RestResult.buildSuccess("退出成功")); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/static/js/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/support/log/LogInterceptor.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.support.log; 2 | 3 | import com.jfinal.aop.Interceptor; 4 | import com.jfinal.aop.Invocation; 5 | import eu.bitwalker.useragentutils.Browser; 6 | import eu.bitwalker.useragentutils.UserAgent; 7 | import io.jboot.Jboot; 8 | import io.jboot.admin.base.web.base.BaseController; 9 | import io.jboot.admin.service.api.LogService; 10 | import io.jboot.admin.service.entity.model.Log; 11 | import io.jboot.admin.service.entity.model.User; 12 | import io.jboot.admin.support.auth.AuthUtils; 13 | 14 | import java.util.Date; 15 | 16 | /** 17 | * 系统日志拦截器 18 | * @author Rlax 19 | * 20 | */ 21 | public class LogInterceptor implements Interceptor { 22 | 23 | private final static com.jfinal.log.Log logger = com.jfinal.log.Log.getLog(LogInterceptor.class); 24 | 25 | @Override 26 | public void intercept(Invocation inv) { 27 | if (inv.getController() instanceof BaseController) { 28 | BaseController c = (BaseController) inv.getController(); 29 | 30 | User user = AuthUtils.getLoginUser(); 31 | UserAgent userAgent = UserAgent.parseUserAgentString(c.getRequest().getHeader("User-Agent")); 32 | Browser browser = userAgent.getBrowser(); 33 | 34 | Log log = new Log(); 35 | log.setUid(user.getId()); 36 | log.setBrowser(browser.getName()); 37 | log.setOperation(c.getRequest().getMethod()); 38 | log.setFrom(c.getReferer()); 39 | log.setIp(c.getIPAddress()); 40 | log.setUrl(c.getRequest().getRequestURI()); 41 | log.setCreateDate(new Date()); 42 | log.setLastUpdAcct(user.getId() == null ? "guest" : user.getName()); 43 | log.setLastUpdTime(new Date()); 44 | log.setNote("记录日志"); 45 | 46 | try { 47 | LogService logService = Jboot.service(LogService.class); 48 | logService.save(log); 49 | } catch (Exception e) { 50 | logger.error(e.getMessage()); 51 | e.printStackTrace(); 52 | } finally { 53 | inv.invoke(); 54 | } 55 | } else { 56 | inv.invoke(); 57 | } 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/plugin/shiro/cache/ShiroCache.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.plugin.shiro.cache; 2 | 3 | import io.jboot.Jboot; 4 | import org.apache.shiro.cache.Cache; 5 | import org.apache.shiro.cache.CacheException; 6 | import org.apache.shiro.util.CollectionUtils; 7 | 8 | import java.util.*; 9 | 10 | /** 11 | * Shiro 缓存,使用jboot cache 12 | * @author Rlax 13 | * 14 | * @param 15 | * @param 16 | */ 17 | public class ShiroCache implements Cache { 18 | 19 | public ShiroCache(String cacheName) { 20 | this.cacheName = cacheName; 21 | } 22 | 23 | private String cacheName; 24 | 25 | @Override 26 | public V get(K key) throws CacheException { 27 | return Jboot.me().getCache().get(cacheName, key); 28 | } 29 | 30 | @Override 31 | public V put(K key, V value) throws CacheException { 32 | Jboot.me().getCache().put(cacheName, key, value); 33 | return value; 34 | } 35 | 36 | @Override 37 | public V remove(K key) throws CacheException { 38 | V value = Jboot.me().getCache().get(cacheName, key); 39 | Jboot.me().getCache().remove(cacheName, key); 40 | return value; 41 | } 42 | 43 | @Override 44 | public void clear() throws CacheException { 45 | Jboot.me().getCache().removeAll(cacheName); 46 | } 47 | 48 | @Override 49 | public int size() { 50 | return Jboot.me().getCache().getKeys(cacheName).size(); 51 | } 52 | 53 | @Override 54 | public Set keys() { 55 | return (Set) Jboot.me().getCache().getKeys(cacheName); 56 | } 57 | 58 | @Override 59 | public Collection values() { 60 | Collection values = Collections.emptyList(); 61 | List keys = Jboot.me().getCache().getKeys(cacheName); 62 | 63 | if (!CollectionUtils.isEmpty(keys)) { 64 | values = new ArrayList(keys.size()); 65 | for (Object key : keys) { 66 | V value = Jboot.me().getCache().get(cacheName, key); 67 | if (value != null) { 68 | values.add(value); 69 | } 70 | } 71 | } 72 | 73 | return values; 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/gencode/model/AppModelGeneratorConfig.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.gencode.model; 2 | 3 | 4 | import io.jboot.config.annotation.PropertyConfig; 5 | 6 | /** 7 | * model代码生成配置 8 | * @author Rlax 9 | * 10 | */ 11 | @PropertyConfig(prefix="jboot.admin.model.ge") 12 | public class AppModelGeneratorConfig { 13 | 14 | /** entity 包名 */ 15 | private String modelpackage; 16 | /** 移除的表前缀 */ 17 | private String removedtablenameprefixes; 18 | /** 不包含表 */ 19 | private String excludedtable; 20 | /** 不包含表前缀 */ 21 | private String excludedtableprefixes; 22 | 23 | public String getModelpackage() { 24 | return modelpackage; 25 | } 26 | 27 | public void setModelpackage(String modelpackage) { 28 | this.modelpackage = modelpackage; 29 | } 30 | 31 | public String getRemovedtablenameprefixes() { 32 | return removedtablenameprefixes; 33 | } 34 | 35 | public void setRemovedtablenameprefixes(String removedtablenameprefixes) { 36 | this.removedtablenameprefixes = removedtablenameprefixes; 37 | } 38 | 39 | public String getExcludedtable() { 40 | return excludedtable; 41 | } 42 | 43 | public void setExcludedtable(String excludedtable) { 44 | this.excludedtable = excludedtable; 45 | } 46 | 47 | public String getExcludedtableprefixes() { 48 | return excludedtableprefixes; 49 | } 50 | 51 | public void setExcludedtableprefixes(String excludedtableprefixes) { 52 | this.excludedtableprefixes = excludedtableprefixes; 53 | } 54 | 55 | @Override 56 | public String toString() { 57 | return "AppGeneratorConfig{" + 58 | "modelpackage='" + modelpackage + '\'' + 59 | ", removedtablenameprefixes='" + removedtablenameprefixes + '\'' + 60 | ", excludedtable='" + excludedtable + '\'' + 61 | ", excludedtableprefixes='" + excludedtableprefixes + '\'' + 62 | '}'; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/support/enjoy/directive/DataDirective.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.support.enjoy.directive; 2 | 3 | import com.jfinal.kit.StrKit; 4 | import com.jfinal.template.Env; 5 | import com.jfinal.template.io.Writer; 6 | import com.jfinal.template.stat.ParseException; 7 | import com.jfinal.template.stat.Scope; 8 | import io.jboot.admin.service.api.DataService; 9 | import io.jboot.admin.service.entity.model.Data; 10 | import io.jboot.core.rpc.annotation.JbootrpcService; 11 | import io.jboot.web.directive.annotation.JFinalDirective; 12 | import io.jboot.web.directive.base.JbootDirectiveBase; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * 根据data的type和value获取对应的字典描述 18 | */ 19 | @JFinalDirective("data") 20 | public class DataDirective extends JbootDirectiveBase { 21 | 22 | @JbootrpcService 23 | private DataService dataApi; 24 | 25 | /** 数据字典类型编码 */ 26 | private String typeCode; 27 | /**需要查询的字典代码*/ 28 | private String code; 29 | 30 | @Override 31 | public void exec(Env env, Scope scope, Writer writer) { 32 | if (exprList.length() > 2) { 33 | throw new ParseException("Wrong number parameter of #date directive, two parameters allowed at most", location); 34 | } 35 | 36 | typeCode = getParam(0, scope); 37 | if (StrKit.isBlank(typeCode)) { 38 | throw new ParseException("typeCode is null", location); 39 | } 40 | 41 | if (exprList.length() > 1) { 42 | code = getParam(1,scope); 43 | } 44 | 45 | 46 | 47 | List list = dataApi.getListByTypeOnUse(typeCode); 48 | 49 | if (StrKit.isBlank(code)) { 50 | write(writer, ""); 51 | } else { 52 | for (Data data : list) { 53 | if(code.equals(data.getCode())) { 54 | write(writer,data.getCodeDesc()); 55 | } 56 | } 57 | } 58 | } 59 | 60 | @Override 61 | public void onRender(Env env, Scope scope, Writer writer) { 62 | 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/support/enjoy/directive/DataTplDirective.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.support.enjoy.directive; 2 | 3 | import com.jfinal.kit.StrKit; 4 | import com.jfinal.template.Env; 5 | import com.jfinal.template.io.Writer; 6 | import com.jfinal.template.stat.ParseException; 7 | import com.jfinal.template.stat.Scope; 8 | import io.jboot.admin.service.api.DataService; 9 | import io.jboot.admin.service.entity.model.Data; 10 | import io.jboot.core.rpc.annotation.JbootrpcService; 11 | import io.jboot.web.directive.annotation.JFinalDirective; 12 | import io.jboot.web.directive.base.JbootDirectiveBase; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * 下拉Option指令 18 | */ 19 | @JFinalDirective("dataTpl") 20 | public class DataTplDirective extends JbootDirectiveBase { 21 | 22 | @JbootrpcService 23 | private DataService dataApi; 24 | 25 | /** 数据字典类型编码 */ 26 | private String typeCode; 27 | /** 属性名默认status,laytpl 里 d.attrName */ 28 | private String attrName; 29 | 30 | @Override 31 | public void exec(Env env, Scope scope, Writer writer) { 32 | if (exprList.length() > 2) { 33 | throw new ParseException("Wrong number parameter of #date directive, two parameters allowed at most", location); 34 | } 35 | 36 | typeCode = getParam(0, scope); 37 | if (StrKit.isBlank(typeCode)) { 38 | throw new ParseException("typeCode is null", location); 39 | } 40 | 41 | if (exprList.length() > 1) { 42 | attrName = getParam(1, "type", scope); 43 | } 44 | List list = dataApi.getListByTypeOnUse(typeCode); 45 | 46 | write(writer, "
"); 47 | for (Data data : list) { 48 | write(writer, "{{# if(d." + attrName + " == \\'" + data.getCode() + "\\') { }}"); 49 | write(writer, data.getCodeDesc()); 50 | write(writer, "{{# } }}"); 51 | } 52 | write(writer, "
"); 53 | } 54 | 55 | @Override 56 | public void onRender(Env env, Scope scope, Writer writer) { 57 | 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /jboot-admin/src/main/java/io/jboot/admin/support/enjoy/directive/OptionDirective.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.support.enjoy.directive; 2 | 3 | import com.jfinal.kit.LogKit; 4 | import com.jfinal.kit.StrKit; 5 | import com.jfinal.template.Env; 6 | import com.jfinal.template.io.Writer; 7 | import com.jfinal.template.stat.ParseException; 8 | import com.jfinal.template.stat.Scope; 9 | import io.jboot.admin.service.api.DataService; 10 | import io.jboot.admin.service.entity.model.Data; 11 | import io.jboot.core.rpc.annotation.JbootrpcService; 12 | import io.jboot.web.directive.annotation.JFinalDirective; 13 | import io.jboot.web.directive.base.JbootDirectiveBase; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * 下拉Option指令 19 | */ 20 | @JFinalDirective("option") 21 | public class OptionDirective extends JbootDirectiveBase { 22 | 23 | @JbootrpcService 24 | private DataService dataApi; 25 | 26 | private String typeCode; 27 | private String value; 28 | 29 | @Override 30 | public void exec(Env env, Scope scope, Writer writer) { 31 | LogKit.info("option====="+typeCode); 32 | if (exprList.length() > 2) { 33 | throw new ParseException("Wrong number parameter of #date directive, two parameters allowed at most", location); 34 | } 35 | 36 | typeCode = getParam(0, scope); 37 | if (StrKit.isBlank(typeCode)) { 38 | throw new ParseException("typeCode is null", location); 39 | } 40 | 41 | if (exprList.length() > 1) { 42 | value = getParam(1, "", scope); 43 | } 44 | 45 | List list = dataApi.getListByTypeOnUse(typeCode); 46 | for (Data data : list) { 47 | if (value != null && data.getCode().equals(value)) { 48 | write(writer, ""); 49 | } else { 50 | write(writer, ""); 51 | } 52 | } 53 | } 54 | 55 | @Override 56 | public void onRender(Env env, Scope scope, Writer writer) { 57 | 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/gencode/service/AppServiceGenerator.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.gencode.service; 2 | 3 | import com.jfinal.kit.StrKit; 4 | import com.jfinal.plugin.activerecord.generator.TableMeta; 5 | import io.jboot.Jboot; 6 | import io.jboot.admin.base.gencode.model.AppMetaBuilder; 7 | import io.jboot.codegen.CodeGenHelpler; 8 | import io.jboot.codegen.service.JbootServiceInterfaceGenerator; 9 | 10 | import javax.sql.DataSource; 11 | import java.util.List; 12 | 13 | /** 14 | * service 生成 15 | * @author Rlax 16 | * 17 | */ 18 | public class AppServiceGenerator { 19 | 20 | public static void doGenerate() { 21 | AppServiceGeneratorConfig config = Jboot.config(AppServiceGeneratorConfig.class); 22 | 23 | System.out.println(config.toString()); 24 | 25 | if (StrKit.isBlank(config.getModelpackage())) { 26 | System.err.println("jboot.admin.service.ge.modelpackage 不可为空"); 27 | System.exit(0); 28 | } 29 | 30 | if (StrKit.isBlank(config.getServicepackage())) { 31 | System.err.println("jboot.admin.service.ge.servicepackage 不可为空"); 32 | System.exit(0); 33 | } 34 | 35 | String modelPackage = config.getModelpackage(); 36 | String servicepackage = config.getServicepackage(); 37 | 38 | System.out.println("start generate..."); 39 | System.out.println("generate dir:" + servicepackage); 40 | 41 | DataSource dataSource = CodeGenHelpler.getDatasource(); 42 | 43 | AppMetaBuilder metaBuilder = new AppMetaBuilder(dataSource); 44 | 45 | if (StrKit.notBlank(config.getRemovedtablenameprefixes())) { 46 | metaBuilder.setRemovedTableNamePrefixes(config.getRemovedtablenameprefixes().split(",")); 47 | } 48 | 49 | if (StrKit.notBlank(config.getExcludedtableprefixes())) { 50 | metaBuilder.setSkipPre(config.getExcludedtableprefixes().split(",")); 51 | } 52 | 53 | List tableMetaList = metaBuilder.build(); 54 | CodeGenHelpler.excludeTables(tableMetaList, config.getExcludedtable()); 55 | 56 | new JbootServiceInterfaceGenerator(servicepackage, modelPackage).generate(tableMetaList); 57 | 58 | System.out.println("service generate finished !!!"); 59 | 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/swaggerui/oauth2-redirect.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 61 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## .gitignore for Grails 1.2 and 1.3 2 | 3 | # .gitignore for maven 4 | target/ 5 | *.releaseBackup 6 | 7 | # web application files 8 | #/web-app/WEB-INF 9 | 10 | # IDE support files 11 | /.classpath 12 | /.launch 13 | /.project 14 | /.settings 15 | /*.launch 16 | /*.tmproj 17 | /ivy* 18 | /eclipse 19 | 20 | # default HSQL database files for production mode 21 | /prodDb.* 22 | 23 | # general HSQL database files 24 | *Db.properties 25 | *Db.script 26 | 27 | # logs 28 | /stacktrace.log 29 | /test/reports 30 | /logs 31 | *.log 32 | *.log.* 33 | 34 | # project release file 35 | /*.war 36 | 37 | # plugin release file 38 | /*.zip 39 | /*.zip.sha1 40 | 41 | # older plugin install locations 42 | /plugins 43 | /web-app/plugins 44 | /web-app/WEB-INF/classes 45 | 46 | # "temporary" build files 47 | target/ 48 | out/ 49 | build/ 50 | 51 | # other 52 | *.iws 53 | 54 | #.gitignore for java 55 | *.class 56 | 57 | # Package Files # 58 | *.jar 59 | *.war 60 | *.ear 61 | 62 | ## .gitignore for eclipse 63 | 64 | *.pydevproject 65 | .project 66 | .metadata 67 | bin/** 68 | tmp/** 69 | tmp/**/* 70 | *.tmp 71 | *.bak 72 | *.swp 73 | *~.nib 74 | local.properties 75 | .classpath 76 | .settings/ 77 | .loadpath 78 | 79 | # External tool builders 80 | .externalToolBuilders/ 81 | 82 | # Locally stored "Eclipse launch configurations" 83 | *.launch 84 | 85 | # CDT-specific 86 | .cproject 87 | 88 | # PDT-specific 89 | .buildpath 90 | 91 | ## .gitignore for intellij 92 | 93 | *.iml 94 | *.ipr 95 | *.iws 96 | .idea/ 97 | 98 | ## .gitignore for linux 99 | .* 100 | !.gitignore 101 | !.gitattributes 102 | !.editorconfig 103 | !.eslintrc 104 | !.travis.yml 105 | *~ 106 | 107 | ## .gitignore for windows 108 | 109 | # Windows image file caches 110 | Thumbs.db 111 | ehthumbs.db 112 | 113 | # Folder config file 114 | Desktop.ini 115 | 116 | # Recycle Bin used on file shares 117 | $RECYCLE.BIN/ 118 | 119 | ## .gitignore for mac os x 120 | 121 | .DS_Store 122 | .AppleDouble 123 | .LSOverride 124 | Icon 125 | 126 | 127 | # Thumbnails 128 | ._* 129 | 130 | # Files that might appear on external disk 131 | .Spotlight-V100 132 | .Trashes 133 | 134 | ## hack for graddle wrapper 135 | !wrapper/*.jar 136 | !**/wrapper/*.jar 137 | 138 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/common/RetResult.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.common; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * rpc 返回结果 7 | * @author Rlax 8 | * 9 | */ 10 | public class RetResult implements Serializable { 11 | 12 | /** 成功失败 */ 13 | private boolean success = true; 14 | /** 返回信息 */ 15 | private T data; 16 | 17 | /** 错误信息 */ 18 | private ErrorResult error; 19 | 20 | public static RetResult buildSuccess() { 21 | return buildSuccess(null); 22 | } 23 | 24 | public static RetResult buildSuccess(T t) { 25 | RetResult rpcResult = new RetResult(); 26 | rpcResult.success(t); 27 | return rpcResult; 28 | } 29 | 30 | public static RetResult buildError() { 31 | return buildError(ErrorResult.NORMAL_ERROR, "操作失败"); 32 | } 33 | 34 | public static RetResult buildValidatorError(String msg) { 35 | return buildError(ErrorResult.VALIDATOR_ERROR, msg); 36 | } 37 | 38 | public static RetResult buildBusinessError(String msg) { 39 | return buildError(ErrorResult.BUSINESS_ERROR, msg); 40 | } 41 | 42 | public static RetResult buildSystemError(String msg) { 43 | return buildError(ErrorResult.SYSTEM_ERROR, msg); 44 | } 45 | 46 | public static RetResult buildError(Integer code, String msg) { 47 | RetResult rpcResult = new RetResult(); 48 | rpcResult.error(code, msg); 49 | return rpcResult; 50 | } 51 | 52 | private void success(T t) { 53 | this.success = true; 54 | this.data = t; 55 | this.error = null; 56 | } 57 | 58 | private void error(Integer code, String msg) { 59 | this.success = false; 60 | this.data = null; 61 | this.error = new ErrorResult(code, msg); 62 | } 63 | 64 | public boolean isSuccess() { 65 | return success; 66 | } 67 | 68 | public void setSuccess(boolean success) { 69 | this.success = success; 70 | } 71 | 72 | public T getData() { 73 | return data; 74 | } 75 | 76 | public void setData(T data) { 77 | this.data = data; 78 | } 79 | 80 | public ErrorResult getError() { 81 | return error; 82 | } 83 | 84 | public void setError(ErrorResult error) { 85 | this.error = error; 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /jboot-b2c-service/jboot-b2c-service-entity/src/main/java/io/jboot/b2c/service/entity/model/base/BaseProduct.java: -------------------------------------------------------------------------------- 1 | package io.jboot.b2c.service.entity.model.base; 2 | 3 | import io.jboot.db.model.JbootModel; 4 | import com.jfinal.plugin.activerecord.IBean; 5 | 6 | /** 7 | * Generated by Jboot, do not modify this file. 8 | */ 9 | @SuppressWarnings("serial") 10 | public abstract class BaseProduct> extends JbootModel implements IBean { 11 | 12 | public void setId(java.lang.Long id) { 13 | set("id", id); 14 | } 15 | 16 | public java.lang.Long getId() { 17 | return getLong("id"); 18 | } 19 | 20 | public void setName(java.lang.String name) { 21 | set("name", name); 22 | } 23 | 24 | public java.lang.String getName() { 25 | return getStr("name"); 26 | } 27 | 28 | public void setProdDesc(java.lang.String prodDesc) { 29 | set("prodDesc", prodDesc); 30 | } 31 | 32 | public java.lang.String getProdDesc() { 33 | return getStr("prodDesc"); 34 | } 35 | 36 | public void setTotalNum(java.lang.Integer totalNum) { 37 | set("totalNum", totalNum); 38 | } 39 | 40 | public java.lang.Integer getTotalNum() { 41 | return getInt("totalNum"); 42 | } 43 | 44 | public void setOrderedNum(java.lang.Integer orderedNum) { 45 | set("orderedNum", orderedNum); 46 | } 47 | 48 | public java.lang.Integer getOrderedNum() { 49 | return getInt("orderedNum"); 50 | } 51 | 52 | public void setStatus(java.lang.String status) { 53 | set("status", status); 54 | } 55 | 56 | public java.lang.String getStatus() { 57 | return getStr("status"); 58 | } 59 | 60 | public void setCreateDate(java.util.Date createDate) { 61 | set("createDate", createDate); 62 | } 63 | 64 | public java.util.Date getCreateDate() { 65 | return get("createDate"); 66 | } 67 | 68 | public void setLastUpdAcct(java.lang.String lastUpdAcct) { 69 | set("lastUpdAcct", lastUpdAcct); 70 | } 71 | 72 | public java.lang.String getLastUpdAcct() { 73 | return getStr("lastUpdAcct"); 74 | } 75 | 76 | public void setLastUpdTime(java.util.Date lastUpdTime) { 77 | set("lastUpdTime", lastUpdTime); 78 | } 79 | 80 | public java.util.Date getLastUpdTime() { 81 | return get("lastUpdTime"); 82 | } 83 | 84 | public void setNote(java.lang.String note) { 85 | set("note", note); 86 | } 87 | 88 | public java.lang.String getNote() { 89 | return getStr("note"); 90 | } 91 | 92 | } 93 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/interceptor/NotNullParaInterceptor.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.interceptor; 2 | 3 | import com.jfinal.aop.Interceptor; 4 | import com.jfinal.aop.Invocation; 5 | import com.jfinal.core.Controller; 6 | import io.jboot.admin.base.common.RestResult; 7 | import io.jboot.utils.ArrayUtils; 8 | import io.jboot.utils.StrUtils; 9 | import io.jboot.web.controller.JbootController; 10 | 11 | import java.lang.reflect.Method; 12 | 13 | /** 14 | * 非空参数拦截器 15 | * @author Rlax 16 | * 17 | */ 18 | public class NotNullParaInterceptor implements Interceptor { 19 | 20 | /** 异常页面 */ 21 | private String exceptionView = "/exception.html"; 22 | 23 | public NotNullParaInterceptor(String exceptionView) { 24 | this.exceptionView = exceptionView; 25 | } 26 | 27 | @Override 28 | public void intercept(Invocation inv) { 29 | Method method = inv.getMethod(); 30 | 31 | NotNullPara notNullPara = method.getAnnotation(NotNullPara.class); 32 | if (notNullPara == null) { 33 | inv.invoke(); 34 | return; 35 | } 36 | 37 | String[] paraKeys = notNullPara.value(); 38 | if (ArrayUtils.isNullOrEmpty(paraKeys)) { 39 | inv.invoke(); 40 | return; 41 | } 42 | 43 | for (String param : paraKeys) { 44 | String value = inv.getController().getPara(param); 45 | if (value == null || value.trim().length() == 0) { 46 | renderError(inv, param, notNullPara.errorRedirect()); 47 | return; 48 | } 49 | } 50 | 51 | inv.invoke(); 52 | } 53 | 54 | 55 | private void renderError(Invocation inv, String param, String errorRedirect) { 56 | if (StrUtils.isNotBlank(errorRedirect)) { 57 | inv.getController().redirect(errorRedirect); 58 | return; 59 | } 60 | 61 | Controller controller = inv.getController(); 62 | if (controller instanceof JbootController) { 63 | JbootController jc = (JbootController) controller; 64 | if (jc.isAjaxRequest()) { 65 | jc.renderJson(RestResult.buildError("参数["+param+"]不可为空")); 66 | return; 67 | } 68 | } 69 | controller.setAttr(BusinessExceptionInterceptor.MESSAGE_TAG, "参数["+param+"]不可为空").render(exceptionView); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /jboot-admin-base/src/main/java/io/jboot/admin/base/gencode/service/AppServiceGeneratorConfig.java: -------------------------------------------------------------------------------- 1 | package io.jboot.admin.base.gencode.service; 2 | 3 | 4 | import io.jboot.config.annotation.PropertyConfig; 5 | 6 | /** 7 | * api代码生成配置 8 | * @author Rlax 9 | * 10 | */ 11 | @PropertyConfig(prefix="jboot.admin.service.ge") 12 | public class AppServiceGeneratorConfig { 13 | 14 | /** entity 包名 */ 15 | private String modelpackage; 16 | /** service 包名 */ 17 | private String servicepackage; 18 | /** 移除的表前缀 */ 19 | private String removedtablenameprefixes; 20 | /** 不包含表 */ 21 | private String excludedtable; 22 | /** 不包含表前缀 */ 23 | private String excludedtableprefixes; 24 | 25 | public String getModelpackage() { 26 | return modelpackage; 27 | } 28 | 29 | public void setModelpackage(String modelpackage) { 30 | this.modelpackage = modelpackage; 31 | } 32 | 33 | public String getServicepackage() { 34 | return servicepackage; 35 | } 36 | 37 | public void setServicepackage(String servicepackage) { 38 | this.servicepackage = servicepackage; 39 | } 40 | 41 | public String getRemovedtablenameprefixes() { 42 | return removedtablenameprefixes; 43 | } 44 | 45 | public void setRemovedtablenameprefixes(String removedtablenameprefixes) { 46 | this.removedtablenameprefixes = removedtablenameprefixes; 47 | } 48 | 49 | public String getExcludedtable() { 50 | return excludedtable; 51 | } 52 | 53 | public void setExcludedtable(String excludedtable) { 54 | this.excludedtable = excludedtable; 55 | } 56 | 57 | public String getExcludedtableprefixes() { 58 | return excludedtableprefixes; 59 | } 60 | 61 | public void setExcludedtableprefixes(String excludedtableprefixes) { 62 | this.excludedtableprefixes = excludedtableprefixes; 63 | } 64 | 65 | @Override 66 | public String toString() { 67 | return "AppServiceGeneratorConfig{" + 68 | "modelpackage='" + modelpackage + '\'' + 69 | ", servicepackage='" + servicepackage + '\'' + 70 | ", removedtablenameprefixes='" + removedtablenameprefixes + '\'' + 71 | ", excludedtable='" + excludedtable + '\'' + 72 | ", excludedtableprefixes='" + excludedtableprefixes + '\'' + 73 | '}'; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /jboot-b2c/src/main/resources/static/js/layui/lay/modules/util.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var t=layui.$,i={fixbar:function(e){var i,o,a="layui-fixbar",r="layui-fixbar-top",n=t(document),l=t("body");e=t.extend({showHeight:200},e),e.bar1=e.bar1===!0?"":e.bar1,e.bar2=e.bar2===!0?"":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var c=[e.bar1,e.bar2,""],g=t(['
    ',e.bar1?'
  • '+c[0]+"
  • ":"",e.bar2?'
  • '+c[1]+"
  • ":"",'
  • '+c[2]+"
  • ","
"].join("")),s=g.find("."+r),u=function(){var t=n.scrollTop();t>=e.showHeight?i||(s.show(),i=1):i&&(s.hide(),i=0)};t("."+a)[0]||("object"==typeof e.css&&g.css(e.css),l.append(g),u(),g.find("li").on("click",function(){var i=t(this),o=i.attr("lay-type");"top"===o&&t("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,o)}),n.on("scroll",function(){clearTimeout(o),o=setTimeout(function(){u()},100)}))},countdown:function(e,t,i){var o=this,a="function"==typeof t,r=new Date(e).getTime(),n=new Date(!t||a?(new Date).getTime():t).getTime(),l=r-n,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=t);var g=setTimeout(function(){o.countdown(e,n+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],t,g),l<=0&&clearTimeout(g),g},timeAgo:function(e,t){var i=this,o=[[],[]],a=(new Date).getTime()-new Date(e).getTime();return a>6912e5?(a=new Date(e),o[0][0]=i.digit(a.getFullYear(),4),o[0][1]=i.digit(a.getMonth()+1),o[0][2]=i.digit(a.getDate()),t||(o[1][0]=i.digit(a.getHours()),o[1][1]=i.digit(a.getMinutes()),o[1][2]=i.digit(a.getSeconds())),o[0].join("-")+" "+o[1].join(":")):a>=864e5?(a/1e3/60/60/24|0)+"天前":a>=36e5?(a/1e3/60/60|0)+"小时前":a>=12e4?(a/1e3/60|0)+"分钟前":a<0?"未来":"刚刚"},digit:function(e,t){var i="";e=String(e),t=t||2;for(var o=e.length;o',e.bar1?'
  • '+c[0]+"
  • ":"",e.bar2?'
  • '+c[1]+"
  • ":"",'
  • '+c[2]+"
  • ",""].join("")),s=g.find("."+r),u=function(){var t=n.scrollTop();t>=e.showHeight?i||(s.show(),i=1):i&&(s.hide(),i=0)};t("."+a)[0]||("object"==typeof e.css&&g.css(e.css),l.append(g),u(),g.find("li").on("click",function(){var i=t(this),o=i.attr("lay-type");"top"===o&&t("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,o)}),n.on("scroll",function(){clearTimeout(o),o=setTimeout(function(){u()},100)}))},countdown:function(e,t,i){var o=this,a="function"==typeof t,r=new Date(e).getTime(),n=new Date(!t||a?(new Date).getTime():t).getTime(),l=r-n,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=t);var g=setTimeout(function(){o.countdown(e,n+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],t,g),l<=0&&clearTimeout(g),g},timeAgo:function(e,t){var i=this,o=[[],[]],a=(new Date).getTime()-new Date(e).getTime();return a>6912e5?(a=new Date(e),o[0][0]=i.digit(a.getFullYear(),4),o[0][1]=i.digit(a.getMonth()+1),o[0][2]=i.digit(a.getDate()),t||(o[1][0]=i.digit(a.getHours()),o[1][1]=i.digit(a.getMinutes()),o[1][2]=i.digit(a.getSeconds())),o[0].join("-")+" "+o[1].join(":")):a>=864e5?(a/1e3/60/60/24|0)+"天前":a>=36e5?(a/1e3/60/60|0)+"小时前":a>=12e4?(a/1e3/60|0)+"分钟前":a<0?"未来":"刚刚"},digit:function(e,t){var i="";e=String(e),t=t||2;for(var o=e.length;o tableMetaList = metaBuilder.build(); 53 | CodeGenHelpler.excludeTables(tableMetaList, config.getExcludedtable()); 54 | 55 | new JbootBaseModelGenerator(baseModelPackage, baseModelDir).generate(tableMetaList); 56 | new JbootModelGenerator(modelPackage, baseModelPackage, modelDir).generate(tableMetaList); 57 | 58 | System.out.println("entity generate finished !!!"); 59 | 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /jboot-admin/src/main/resources/template/system/user/profile.html: -------------------------------------------------------------------------------- 1 | #include("/template/common/layout/_page_layout.html") 2 | #@layout() 3 | 4 | #define css() 5 | 8 | #end 9 | 10 | #define js() 11 | 34 | #end 35 | 36 | #define content() 37 |
    38 |
    39 | 40 |
    41 | 42 |
    43 | 44 |
    45 |
    46 | 47 |
    48 | 49 |
    50 | 51 |
    52 |
    53 | 54 |
    55 | 56 |
    57 | 58 |
    59 |
    60 | 61 |
    62 | 63 | 66 | 67 |
    68 |
    69 |
    70 | #end --------------------------------------------------------------------------------