From 6465d3c4125d1ad9a85de124cf772647fbb13dd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9A=AE=E5=85=89=EF=BC=9A=E5=9F=8E=E4=B8=AD=E5=9F=8E?= <806783409@qq.com> Date: Sat, 8 Dec 2018 14:59:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 58 +---- zyplayer-doc-core/pom.xml | 30 +++ .../doc/core/exception/ConfirmException.java | 30 +++ .../doc/core/json/DocResponseJson.java | 153 ++++++++++++ .../zyplayer/doc/core}/json/ResponseJson.java | 4 +- zyplayer-doc-db/pom.xml | 6 +- zyplayer-doc-manage/pom.xml | 14 +- .../com/zyplayer/doc/manage/Application.java | 8 +- .../framework/config/CustomizationBean.java | 19 ++ .../config/MgStorageServiceImpl.java | 25 +- .../config/SwaggerConfiguration.java | 42 +++- ...a => DocAuthenticationSuccessHandler.java} | 22 +- .../security/DocDetailsServiceImpl.java | 58 +++++ ...MyUserDetails.java => DocUserDetails.java} | 10 +- .../config/security/DocUserFilter.java | 53 +++++ .../{UserUtil.java => DocUserUtil.java} | 8 +- ...UsernamePasswordAuthenticationFilter.java} | 12 +- .../security/UserDetailsServiceImpl.java | 30 --- .../config/security/WebSecurity1Config.java | 113 --------- .../config/security/WebSecurityConfig.java | 53 +++-- .../GlobalHandlerExceptionResolver.java | 119 ++++++++++ .../repository/manage/entity/AuthInfo.java | 105 +++++++++ .../repository/manage/entity/UserAuth.java | 131 +++++++++++ .../repository/manage/entity/UserInfo.java | 157 +++++++++++++ .../manage/mapper/AuthInfoMapper.java | 16 ++ .../manage/mapper/UserAuthMapper.java | 16 ++ .../manage/mapper/UserInfoMapper.java | 16 ++ .../support/generator/CodeGenerator.java | 8 +- .../service/manage/AuthInfoService.java | 16 ++ .../service/manage/UserAuthService.java | 16 ++ .../service/manage/UserInfoService.java | 16 ++ .../manage/impl/AuthInfoServiceImpl.java | 20 ++ .../manage/impl/UserAuthServiceImpl.java | 20 ++ .../manage/impl/UserInfoServiceImpl.java | 20 ++ .../GeneratorAuthInfoController.java | 20 ++ .../GeneratorUserAuthController.java | 20 ++ .../GeneratorUserInfoController.java | 20 ++ .../GeneratorZyplayerStorageController.java | 20 ++ .../manage/web/manage/AuthInfoController.java | 63 +++++ .../manage/web/manage/HelloController.java | 23 -- .../manage/web/manage/LoginController.java | 58 +++++ .../manage/web/manage/UserAuthController.java | 70 ++++++ .../doc/manage/web/manage/UserController.java | 123 ---------- .../manage/web/manage/UserInfoController.java | 62 +++++ .../swagger/ZyplayerStorageController.java | 10 +- .../src/main/resources/application.yml | 2 +- .../mapper/manage/AuthInfoMapper.xml | 5 + .../mapper/manage/UserAuthMapper.xml | 5 + .../mapper/manage/UserInfoMapper.xml | 5 + .../src/main/webapp/statics/common/403.html | 14 ++ .../src/main/webapp/statics/common/404.html | 14 ++ .../src/main/webapp/statics/common/500.html | 14 ++ .../main/webapp/statics/lib/mg/js/common.js | 8 + .../src/main/webapp/statics/manage/login.html | 12 +- zyplayer-doc-swagger/README.md | 12 +- zyplayer-doc-swagger/pom.xml | 23 +- .../controller/MgHttpRequestController.java | 30 --- .../controller/MgStorageController.java | 72 ------ .../SwaggerCommonConfiguration.java | 29 --- .../framework/json/MgUiResponseJson.java | 219 ------------------ .../controller/MgDocumentController.java | 95 ++++---- .../controller/MgHttpRequestController.java | 60 +++++ .../controller/MgStorageController.java | 66 ++++++ .../controller/param/HttpRequestParam.java | 11 +- .../swagger/controller/vo/HttpCookieVo.java | 12 +- .../swagger/controller/vo/HttpHeaderVo.java | 2 +- .../swagger/controller/vo/HttpRequestVo.java | 55 +++++ .../controller/vo/SwaggerLocationVo.java | 69 ++++++ .../configuration/EnableSwaggerMgUi.java | 10 +- .../configuration/SpringContextUtil.java | 6 +- .../SwaggerCommonConfiguration.java | 25 ++ .../framework/constant/StorageKeys.java | 4 +- .../swagger/framework/constant/Toast.java | 2 +- .../framework/filter/MgUiTestFilter.java | 8 +- .../swagger/framework/service/MgStorage.java | 47 ++++ .../framework/service/MgStorageService.java | 24 +- .../src/main/resources/document.html | 25 +- .../resources/webjars/mg-ui/css/mg-ui.css | 2 +- .../resources/webjars/mg-ui/js/mg-ui-debug.js | 11 +- .../main/resources/webjars/mg-ui/js/mg-ui.js | 14 +- 80 files changed, 2043 insertions(+), 882 deletions(-) create mode 100644 zyplayer-doc-core/pom.xml create mode 100644 zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/exception/ConfirmException.java create mode 100644 zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/DocResponseJson.java rename {zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework => zyplayer-doc-core/src/main/java/com/zyplayer/doc/core}/json/ResponseJson.java (51%) create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/CustomizationBean.java rename zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/{MyAuthenticationSuccessHandler.java => DocAuthenticationSuccessHandler.java} (72%) create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocDetailsServiceImpl.java rename zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/{MyUserDetails.java => DocUserDetails.java} (80%) create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUserFilter.java rename zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/{UserUtil.java => DocUserUtil.java} (70%) rename zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/{MyUsernamePasswordAuthenticationFilter.java => DocUsernamePasswordAuthenticationFilter.java} (74%) delete mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/UserDetailsServiceImpl.java delete mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurity1Config.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/exception/GlobalHandlerExceptionResolver.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/AuthInfo.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/UserAuth.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/UserInfo.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/AuthInfoMapper.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/UserAuthMapper.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/UserInfoMapper.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/AuthInfoService.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/UserAuthService.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/UserInfoService.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/AuthInfoServiceImpl.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/UserAuthServiceImpl.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/UserInfoServiceImpl.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorAuthInfoController.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorUserAuthController.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorUserInfoController.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorZyplayerStorageController.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/AuthInfoController.java delete mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/HelloController.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/LoginController.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserAuthController.java delete mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserController.java create mode 100644 zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserInfoController.java create mode 100644 zyplayer-doc-manage/src/main/resources/mapper/manage/AuthInfoMapper.xml create mode 100644 zyplayer-doc-manage/src/main/resources/mapper/manage/UserAuthMapper.xml create mode 100644 zyplayer-doc-manage/src/main/resources/mapper/manage/UserInfoMapper.xml create mode 100644 zyplayer-doc-manage/src/main/webapp/statics/common/403.html create mode 100644 zyplayer-doc-manage/src/main/webapp/statics/common/404.html create mode 100644 zyplayer-doc-manage/src/main/webapp/statics/common/500.html delete mode 100644 zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgHttpRequestController.java delete mode 100644 zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgStorageController.java delete mode 100644 zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/configuration/SwaggerCommonConfiguration.java delete mode 100644 zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/json/MgUiResponseJson.java rename zyplayer-doc-swagger/src/main/java/com/{mg => zyplayer/doc}/swagger/controller/MgDocumentController.java (77%) create mode 100644 zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgHttpRequestController.java create mode 100644 zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgStorageController.java rename zyplayer-doc-swagger/src/main/java/com/{mg => zyplayer/doc}/swagger/controller/param/HttpRequestParam.java (89%) rename zyplayer-doc-swagger/src/main/java/com/{mg => zyplayer/doc}/swagger/controller/vo/HttpCookieVo.java (64%) rename zyplayer-doc-swagger/src/main/java/com/{mg => zyplayer/doc}/swagger/controller/vo/HttpHeaderVo.java (83%) create mode 100644 zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/HttpRequestVo.java create mode 100644 zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/SwaggerLocationVo.java rename zyplayer-doc-swagger/src/main/java/com/{mg => zyplayer/doc}/swagger/framework/configuration/EnableSwaggerMgUi.java (70%) rename zyplayer-doc-swagger/src/main/java/com/{mg => zyplayer/doc}/swagger/framework/configuration/SpringContextUtil.java (88%) create mode 100644 zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/configuration/SwaggerCommonConfiguration.java rename zyplayer-doc-swagger/src/main/java/com/{mg => zyplayer/doc}/swagger/framework/constant/StorageKeys.java (65%) rename zyplayer-doc-swagger/src/main/java/com/{mg => zyplayer/doc}/swagger/framework/constant/Toast.java (76%) rename zyplayer-doc-swagger/src/main/java/com/{mg => zyplayer/doc}/swagger/framework/filter/MgUiTestFilter.java (90%) create mode 100644 zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/service/MgStorage.java rename zyplayer-doc-swagger/src/main/java/com/{mg => zyplayer/doc}/swagger/framework/service/MgStorageService.java (54%) diff --git a/pom.xml b/pom.xml index 4f996483..bbb1f15a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,74 +4,35 @@ com.zyplayer zyplayer-doc - 1.0.1-SNAPSHOT + 1.0.0 pom zyplayer-doc 定位为所有文档的管理项目,swagger文档、数据库文档、、、、等 - - org.springframework.boot - spring-boot-starter-parent - 2.0.6.RELEASE - - UTF-8 UTF-8 1.8 - 3.0.6 1.2.53 - 2.0.1 - 2.0 - org.springframework.boot - spring-boot-starter + javax.servlet + servlet-api + 2.5 - org.springframework.boot - spring-boot-starter-web + io.springfox + springfox-swagger2 + 2.7.0 - - org.springframework.boot - spring-boot-starter-test - test - - - mysql - mysql-connector-java - - - com.baomidou - mybatis-plus-boot-starter - ${mybatis.plus.boot.starter.version} - - com.alibaba fastjson ${fastjson.version} - - - com.zyplayer - zyplayer-doc-swagger - ${swagger.mg.ui.version} - - - - org.apache.velocity - velocity-engine-core - ${velocity.engine.core.version} - - - - org.freemarker - freemarker - @@ -85,6 +46,7 @@ zyplayer-doc-db zyplayer-doc-manage - zyplayer-doc-swagger - + zyplayer-doc-swagger + zyplayer-doc-core + \ No newline at end of file diff --git a/zyplayer-doc-core/pom.xml b/zyplayer-doc-core/pom.xml new file mode 100644 index 00000000..e58558fd --- /dev/null +++ b/zyplayer-doc-core/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + + com.zyplayer + zyplayer-doc + 1.0.0 + + + com.zyplayer + zyplayer-doc-core + 1.0.0 + zyplayer-doc-core + + http://maven.apache.org + + UTF-8 + UTF-8 + 1.8 + + + + junit + junit + 3.8.1 + test + + + diff --git a/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/exception/ConfirmException.java b/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/exception/ConfirmException.java new file mode 100644 index 00000000..2fcf4705 --- /dev/null +++ b/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/exception/ConfirmException.java @@ -0,0 +1,30 @@ +package com.zyplayer.doc.core.exception; + +/** + * 前端提示异常 + */ +public class ConfirmException extends RuntimeException { + + private static final long serialVersionUID = -7084066605197111614L; + + public ConfirmException() { + super(); + } + + public ConfirmException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } + + public ConfirmException(String message, Throwable cause) { + super(message, cause); + } + + public ConfirmException(String message) { + super(message); + } + + public ConfirmException(Throwable cause) { + super(cause); + } + +} diff --git a/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/DocResponseJson.java b/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/DocResponseJson.java new file mode 100644 index 00000000..19b79c62 --- /dev/null +++ b/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/DocResponseJson.java @@ -0,0 +1,153 @@ +package com.zyplayer.doc.core.json; + +import java.io.IOException; +import java.util.Date; + +import javax.servlet.http.HttpServletResponse; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializeConfig; +import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; + +import io.swagger.annotations.ApiModelProperty; + +/** + * 文档返回数据格式 + * + * @author 暮光:城中城 + * @since 2018年8月21日 + */ +public class DocResponseJson implements ResponseJson { + private static SerializeConfig mapping = new SerializeConfig(); + static { + mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss")); + } + @ApiModelProperty(value = "状态码") + private Integer errCode; + @ApiModelProperty(value = "返回值说明") + private String errMsg; + @ApiModelProperty(value = "返回数据") + private T data; + + public DocResponseJson() { + this.errCode = 200; + } + + public DocResponseJson(T data) { + this.setData(data); + this.errCode = 200; + } + + public DocResponseJson(int errCode, String errMsg) { + super(); + this.errCode = errCode; + this.errMsg = errMsg; + } + + public DocResponseJson(int errCode, String errMsg, T data) { + super(); + this.setData(data); + this.errCode = errCode; + this.errMsg = errMsg; + } + + public DocResponseJson(Integer errCode) { + super(); + this.errCode = errCode; + } + + public Integer getErrCode() { + return errCode; + } + + public void setErrCode(Integer errCode) { + this.errCode = errCode; + } + + public String getErrMsg() { + return errMsg; + } + + public void setErrMsg(String errMsg) { + this.errMsg = errMsg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + /** + * 提示语 + * + * @author 暮光:城中城 + * @since 2018年8月7日 + * @return + */ + public static DocResponseJson warn(String errMsg) { + return new DocResponseJson<>(300, errMsg); + } + + /** + * 错误 + * + * @author 暮光:城中城 + * @since 2018年8月7日 + * @return + */ + public static DocResponseJson error(String errMsg) { + return new DocResponseJson<>(500, errMsg); + } + + /** + * 成功的返回方法 + * + * @author 暮光:城中城 + * @since 2018年8月7日 + * @return + */ + public static DocResponseJson ok() { + return new DocResponseJson<>(); + } + + /** + * 成功的返回方法 + * + * @author 暮光:城中城 + * @since 2018年8月7日 + * @return + */ + public static DocResponseJson ok(T data) { + if (data == null) { + return DocResponseJson.ok(); + } + DocResponseJson responseJson = new DocResponseJson<>(); + responseJson.setData(data); + return responseJson; + } + + public String toJson() { + return JSON.toJSONString(this, mapping); + } + + public void send(HttpServletResponse response) { + try { + response.setStatus(200); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Cache-Control", "no-cache, must-revalidate"); + response.getWriter().write(toJson()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public String toString() { + return "DefaultResponseJson [errCode=" + errCode + ", errMsg=" + errMsg + ", data=" + data + "]"; + } + +} diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/json/ResponseJson.java b/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/ResponseJson.java similarity index 51% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/json/ResponseJson.java rename to zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/ResponseJson.java index 503fc080..42cbb966 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/json/ResponseJson.java +++ b/zyplayer-doc-core/src/main/java/com/zyplayer/doc/core/json/ResponseJson.java @@ -1,4 +1,4 @@ -package com.mg.swagger.framework.json; +package com.zyplayer.doc.core.json; /** * json视图 @@ -6,6 +6,6 @@ package com.mg.swagger.framework.json; * @author 暮光:城中城 * @since 2018年8月21日 */ -public interface ResponseJson { +public interface ResponseJson { } diff --git a/zyplayer-doc-db/pom.xml b/zyplayer-doc-db/pom.xml index cfd68d55..b391b966 100644 --- a/zyplayer-doc-db/pom.xml +++ b/zyplayer-doc-db/pom.xml @@ -84,9 +84,9 @@ - scm:git@git.oschina.net:zyplayer/swagger-mg-ui.git - scm:git@git.oschina.net:zyplayer/swagger-mg-ui.git - git@git.oschina.net:zyplayer/swagger-mg-ui.git + scm:git@git.oschina.net:zyplayer/zyplayer-doc.git + scm:git@git.oschina.net:zyplayer/zyplayer-doc.git + git@git.oschina.net:zyplayer/zyplayer-doc.git diff --git a/zyplayer-doc-manage/pom.xml b/zyplayer-doc-manage/pom.xml index 5e54abda..c45bd2e7 100644 --- a/zyplayer-doc-manage/pom.xml +++ b/zyplayer-doc-manage/pom.xml @@ -4,8 +4,8 @@ com.zyplayer zyplayer-doc-manage - 1.0.1-SNAPSHOT - jar + 1.0.1 + war zyplayer-doc-manage 定位为所有文档的管理项目,swagger文档、数据库文档、、、、等 @@ -22,7 +22,8 @@ 1.8 3.0.6 1.2.53 - 2.0.1 + 2.0.1 + 1.0.0 2.0 @@ -68,7 +69,12 @@ com.zyplayer zyplayer-doc-swagger - ${swagger.mg.ui.version} + ${zyplayer.doc.swagger.version} + + + com.zyplayer + zyplayer-doc-core + ${zyplayer.doc.core.version} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/Application.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/Application.java index e7177d13..2df33ce1 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/Application.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/Application.java @@ -10,6 +10,7 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.Environment; import java.net.InetAddress; +import java.util.Optional; /** * 程序启动器 @@ -27,11 +28,14 @@ public class Application extends SpringBootServletInitializer { public static void main(String[] args) throws Exception { ConfigurableApplicationContext application = SpringApplication.run(Application.class, args); Environment env = application.getEnvironment(); + String contextPath = env.getProperty("server.servlet.context-path"); + contextPath = Optional.ofNullable(contextPath).orElse("").replaceFirst("/", ""); + contextPath = (contextPath.length() <= 0 || contextPath.endsWith("/")) ? contextPath : contextPath + "/"; logger.info("\n----------------------------------------------------------\n\t" + "\t\t地址列表\n\t" + - "文档地址:http://{}:{}/document.html\n" + + "文档地址:http://{}:{}/{}document.html\n" + "----------------------------------------------------------", - InetAddress.getLocalHost().getHostAddress(), env.getProperty("server.port") + InetAddress.getLocalHost().getHostAddress(), env.getProperty("server.port"), contextPath ); } } diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/CustomizationBean.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/CustomizationBean.java new file mode 100644 index 00000000..72ea2104 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/CustomizationBean.java @@ -0,0 +1,19 @@ +package com.zyplayer.doc.manage.framework.config; + +import org.springframework.boot.web.server.ErrorPage; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpStatus; + +@Configuration +public class CustomizationBean implements WebServerFactoryCustomizer { + + @Override + public void customize(ConfigurableServletWebServerFactory factory) { + factory.addErrorPages(new ErrorPage(HttpStatus.FORBIDDEN, "/statics/common/403.html")); + factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/statics/common/404.html")); + factory.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/statics/common/500.html")); + } + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/MgStorageServiceImpl.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/MgStorageServiceImpl.java index 9163dba4..559117e6 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/MgStorageServiceImpl.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/MgStorageServiceImpl.java @@ -1,13 +1,19 @@ package com.zyplayer.doc.manage.framework.config; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.mg.swagger.framework.service.MgStorageService; import com.zyplayer.doc.manage.repository.manage.entity.ZyplayerStorage; import com.zyplayer.doc.manage.service.manage.ZyplayerStorageService; +import com.zyplayer.doc.swagger.framework.service.MgStorage; +import com.zyplayer.doc.swagger.framework.service.MgStorageService; /** * 申明为@Service之后网页上才能使用存储能力,同时需要在@EnableSwagger2的地方添加@EnableSwaggerMgUi注解, @@ -31,7 +37,7 @@ public class MgStorageServiceImpl implements MgStorageService { @Override public String get(String key) { QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq(true, "doc_key", key); + wrapper.eq("doc_key", key); ZyplayerStorage zyplayerStorage = zyplayerStorageService.getOne(wrapper); if (zyplayerStorage == null) { return null; @@ -39,6 +45,21 @@ public class MgStorageServiceImpl implements MgStorageService { return zyplayerStorage.getDocValue(); } + @Override + public List like(String key, String value) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.isNotBlank(key), "doc_key", key); + wrapper.like(StringUtils.isNotBlank(value), "doc_value", value); + List storageList = zyplayerStorageService.list(wrapper); + if (storageList == null || storageList.isEmpty()) { + return Collections.emptyList(); + } + List resultList = storageList.stream().map(val -> { + return new MgStorage(val.getDocKey(), val.getDocValue()); + }).collect(Collectors.toList()); + return resultList; + } + /** * 使用数据库来存储,例: storageMapper.updateOrInsert(key, value); */ diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/SwaggerConfiguration.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/SwaggerConfiguration.java index ce25e95f..2c0a801b 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/SwaggerConfiguration.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/SwaggerConfiguration.java @@ -1,9 +1,21 @@ package com.zyplayer.doc.manage.framework.config; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.mg.swagger.framework.configuration.EnableSwaggerMgUi; +import com.google.common.base.Predicates; +import com.zyplayer.doc.swagger.framework.configuration.EnableSwaggerMgUi; + +import io.swagger.annotations.Api; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * 不需要管理本项目的文档,只需要开启@EnableSwaggerMgUi即可 @@ -11,12 +23,34 @@ import com.mg.swagger.framework.configuration.EnableSwaggerMgUi; * @since 2018年11月11日 */ @Configuration +@EnableSwagger2 @EnableSwaggerMgUi( - selfDoc = false,// 不开启自身的文档,本项目只当管理文档的项目使用 - defaultResources = {// selfDoc=false时有用,启动后第一次访问没有数据情况下需要加载进来的swagger-resources地址 + selfDoc = true,// 是否开启自身的文档 + defaultResources = {// 启动后第一次访问没有数据情况下需要加载进来的swagger-resources地址 //"http://localhost:8080/swagger-resources" } ) public class SwaggerConfiguration { - + + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(Predicates.or( + RequestHandlerSelectors.basePackage("com.zyplayer.doc.manage"), + RequestHandlerSelectors.withClassAnnotation(Api.class))) + .paths(PathSelectors.any()) + .build(); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("zyplayer-doc-manage接口文档") + .description("欢迎使用") + .termsOfServiceUrl("") + .contact(new Contact("", "", "")) + .version("1.0") + .build(); + } } diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/MyAuthenticationSuccessHandler.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocAuthenticationSuccessHandler.java similarity index 72% rename from zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/MyAuthenticationSuccessHandler.java rename to zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocAuthenticationSuccessHandler.java index 7a17a702..cbccd5a8 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/MyAuthenticationSuccessHandler.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocAuthenticationSuccessHandler.java @@ -1,4 +1,5 @@ package com.zyplayer.doc.manage.framework.config.security; + import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -7,6 +8,8 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.core.Authentication; import org.springframework.security.web.DefaultRedirectStrategy; import org.springframework.security.web.RedirectStrategy; @@ -15,13 +18,12 @@ import org.springframework.security.web.savedrequest.HttpSessionRequestCache; import org.springframework.security.web.savedrequest.RequestCache; import org.springframework.security.web.savedrequest.SavedRequest; -/** - * 备用 - * @author Administrator - * - */ -public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHandler { +import com.alibaba.fastjson.JSON; +public class DocAuthenticationSuccessHandler implements AuthenticationSuccessHandler { + + private static Logger logger = LoggerFactory.getLogger(DocAuthenticationSuccessHandler.class); + private RequestCache requestCache = new HttpSessionRequestCache(); private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); @@ -29,18 +31,16 @@ public class MyAuthenticationSuccessHandler implements AuthenticationSuccessHand public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { SavedRequest savedRequest = requestCache.getRequest(request, response); String targetUrl = savedRequest.getRedirectUrl(); -// boolean isAjax = HttpHelper.isAjaxRequest(request); - boolean isAjax = true; + boolean isAjax = "XMLHttpRequest".equals(request.getHeader("X-Requested-With")); if (isAjax) { Map result = new HashMap(); result.put("url", targetUrl); - response.getWriter().print(result.toString()); + response.getWriter().print(JSON.toJSONString(result)); response.getWriter().flush(); } else { redirectStrategy.sendRedirect(request, response, targetUrl); } - - System.out.println("Redirecting to DefaultSavedRequest Url: " + targetUrl); + logger.info("Redirecting to DefaultSavedRequest Url: " + targetUrl); } } \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocDetailsServiceImpl.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocDetailsServiceImpl.java new file mode 100644 index 00000000..96cb098e --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocDetailsServiceImpl.java @@ -0,0 +1,58 @@ +package com.zyplayer.doc.manage.framework.config.security; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.zyplayer.doc.manage.repository.manage.entity.AuthInfo; +import com.zyplayer.doc.manage.repository.manage.entity.UserAuth; +import com.zyplayer.doc.manage.repository.manage.entity.UserInfo; +import com.zyplayer.doc.manage.service.manage.AuthInfoService; +import com.zyplayer.doc.manage.service.manage.UserAuthService; +import com.zyplayer.doc.manage.service.manage.UserInfoService; + +@Service +public class DocDetailsServiceImpl implements UserDetailsService { + + @Autowired + private UserInfoService userInfoService; + @Autowired + private UserAuthService userAuthService; + @Autowired + private AuthInfoService authInfoService; + + @Override + public UserDetails loadUserByUsername(String userNo) throws UsernameNotFoundException { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_no", userNo); + UserInfo userInfo = userInfoService.getOne(queryWrapper); + if (userInfo == null) { + throw new UsernameNotFoundException("用户名'" + userNo + "'没有找到!"); + } + QueryWrapper authWrapper = new QueryWrapper<>(); + authWrapper.eq("user_id", userInfo.getId()).eq("del_flag", "0"); + List userAuthList = userAuthService.list(authWrapper); + List authorities = new ArrayList(); + if (userAuthList != null && userAuthList.size() > 0) { + List authIdList = userAuthList.stream().collect(Collectors.mapping(UserAuth::getAuthId, Collectors.toList())); + Collection authInfoList = authInfoService.listByIds(authIdList); + authInfoList.forEach(val -> { + authorities.add(new SimpleGrantedAuthority(val.getAuthName())); + }); + } + //String pwdMd5 = DigestUtils.md5DigestAsHex(userInfo.getPassword().getBytes()); + DocUserDetails userDetails = new DocUserDetails(userInfo.getId(), userInfo.getUserNo(), userInfo.getPassword(), true, authorities); + return userDetails; + } + +} \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/MyUserDetails.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUserDetails.java similarity index 80% rename from zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/MyUserDetails.java rename to zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUserDetails.java index 2db3d711..b928cf02 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/MyUserDetails.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUserDetails.java @@ -5,16 +5,16 @@ import java.util.Collection; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; -public class MyUserDetails implements UserDetails { +public class DocUserDetails implements UserDetails { private static final long serialVersionUID = 1L; - private Integer userId; + private Long userId; private String username; private String password; private boolean enabled; private Collection authorities; - public MyUserDetails(Integer userId, String username, String password, boolean enabled) { + public DocUserDetails(Long userId, String username, String password, boolean enabled) { super(); this.userId = userId; this.username = username; @@ -22,7 +22,7 @@ public class MyUserDetails implements UserDetails { this.enabled = enabled; } - public MyUserDetails(Integer userId, String username, String password, boolean enabled, + public DocUserDetails(Long userId, String username, String password, boolean enabled, Collection authorities) { super(); this.userId = userId; @@ -32,7 +32,7 @@ public class MyUserDetails implements UserDetails { this.authorities = authorities; } - public Integer getUserId() { + public Long getUserId() { return this.userId; } diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUserFilter.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUserFilter.java new file mode 100644 index 00000000..7e80942c --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUserFilter.java @@ -0,0 +1,53 @@ +package com.zyplayer.doc.manage.framework.config.security; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.context.annotation.Configuration; + +@Configuration +public class DocUserFilter implements Filter{ + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + HttpServletRequest httpRequest = (HttpServletRequest) request; + Cookie[] cookies = httpRequest.getCookies(); + boolean haveCtx = false; + Object ctxObj = httpRequest.getServletContext().getAttribute("ctx"); + String ctxStr = String.valueOf(ctxObj); + if (cookies != null && cookies.length > 0) { + for (Cookie cookie : cookies) { + if ("ctx".equals(cookie.getName()) && ctxStr.equals(cookie.getValue())) { + haveCtx = true; + break; + } + } + } + if (!haveCtx) { + // 前后端分离的,前段拿不到项目名,直接写/是不对的,只有后端放到cookie里给前端 + HttpServletResponse httpResponse = (HttpServletResponse) response; + Cookie cookieAdd = new Cookie("ctx", ctxStr); + cookieAdd.setPath("/"); + httpResponse.addCookie(cookieAdd); + } + chain.doFilter(httpRequest, response); + } + + @Override + public void destroy() { + } + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/UserUtil.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUserUtil.java similarity index 70% rename from zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/UserUtil.java rename to zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUserUtil.java index 8ebc71d0..4d531cd0 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/UserUtil.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUserUtil.java @@ -6,20 +6,20 @@ import org.springframework.security.core.context.SecurityContextHolder; /** * 用户工具类 */ -public class UserUtil { +public class DocUserUtil { /** * 获取当前用户 * @return */ - public static MyUserDetails getCurrentUser() { + public static DocUserDetails getCurrentUser() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); Object principal = null; if (authentication != null) { principal = authentication.getPrincipal(); } - if (principal != null && principal instanceof MyUserDetails) { - return (MyUserDetails) principal; + if (principal != null && principal instanceof DocUserDetails) { + return (DocUserDetails) principal; } return null; } diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/MyUsernamePasswordAuthenticationFilter.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUsernamePasswordAuthenticationFilter.java similarity index 74% rename from zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/MyUsernamePasswordAuthenticationFilter.java rename to zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUsernamePasswordAuthenticationFilter.java index 97ddf5cd..0ace5519 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/MyUsernamePasswordAuthenticationFilter.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/DocUsernamePasswordAuthenticationFilter.java @@ -10,9 +10,9 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -public class MyUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter { +public class DocUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter { // 是否开启验证码功能 - private boolean isOpenValidateCode = true; + private boolean isOpenValidateCode = false; public static final String VALIDATE_CODE = "validateCode"; @@ -25,13 +25,11 @@ public class MyUsernamePasswordAuthenticationFilter extends UsernamePasswordAuth protected void checkValidateCode(HttpServletRequest request) { HttpSession session = request.getSession(); - - String sessionValidateCode = obtainSessionValidateCode(session); - sessionValidateCode = "1234";// 做个假的验证码; + String sessionCode = this.obtainSessionValidateCode(session); // 让上一次的验证码失效 session.setAttribute(VALIDATE_CODE, null); - String validateCodeParameter = obtainValidateCodeParameter(request); - if (StringUtils.isEmpty(validateCodeParameter) || !sessionValidateCode.equalsIgnoreCase(validateCodeParameter)) { + String parameterCode = this.obtainValidateCodeParameter(request); + if (StringUtils.isEmpty(sessionCode) || !sessionCode.equalsIgnoreCase(parameterCode)) { throw new AuthenticationServiceException("验证码错误!"); } } diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/UserDetailsServiceImpl.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/UserDetailsServiceImpl.java deleted file mode 100644 index a4a23109..00000000 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/UserDetailsServiceImpl.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.zyplayer.doc.manage.framework.config.security; - -import java.util.ArrayList; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.stereotype.Service; -import org.springframework.util.DigestUtils; - -@Service -public class UserDetailsServiceImpl implements UserDetailsService { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Override - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - if ("1".equals(username)) { - List authorities = new ArrayList(); - authorities.add(new SimpleGrantedAuthority("ROLE_1")); - String pwd = DigestUtils.md5DigestAsHex("1".getBytes()); - return new MyUserDetails(1, "1", pwd, true, authorities); - } - throw new UsernameNotFoundException("用户名 '" + username + "'没有找到!"); - } -} \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurity1Config.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurity1Config.java deleted file mode 100644 index 2e2bed73..00000000 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurity1Config.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.zyplayer.doc.manage.framework.config.security; -//package com.zyplayer.doc.manage.framework.config.security; -// -//import java.io.IOException; -//import java.io.PrintWriter; -// -//import javax.servlet.ServletException; -//import javax.servlet.http.HttpServletRequest; -//import javax.servlet.http.HttpServletResponse; -// -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.context.annotation.Bean; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -//import org.springframework.security.config.annotation.web.builders.HttpSecurity; -//import org.springframework.security.config.annotation.web.builders.WebSecurity; -//import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -//import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -//import org.springframework.security.core.Authentication; -//import org.springframework.security.core.AuthenticationException; -//import org.springframework.security.web.authentication.AuthenticationFailureHandler; -//import org.springframework.security.web.authentication.AuthenticationSuccessHandler; -//import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; -//import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; -// -//@Configuration -//@EnableWebSecurity // 注解开启Spring Security的功能 -//public class WebSecurityConfig extends WebSecurityConfigurerAdapter { -// -// @Override -// protected void configure(HttpSecurity http) throws Exception { -// http.authorizeRequests()//定义哪些url需要保护,哪些url不需要保护 -// .antMatchers("/statics/lib/**", "/message/").permitAll()//定义不需要认证就可以访问 -// .anyRequest() -// .authenticated() -// .and() -// .formLogin() -// .loginPage("/statics/manage/login.html")// 定义当需要用户登录时候,转到的登录页面 -// .successHandler(new AuthenticationSuccessHandler() { -// @Override -// public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException { -// httpServletResponse.setContentType("application/json;charset=utf-8"); -// PrintWriter out = httpServletResponse.getWriter(); -// out.write("{\"status\":\"ok\",\"msg\":\"登录成功\"}"); -// out.flush(); -// out.close(); -// } -// }).failureHandler(new AuthenticationFailureHandler() { -// @Override -// public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException { -// httpServletResponse.setContentType("application/json;charset=utf-8"); -// PrintWriter out = httpServletResponse.getWriter(); -// out.write("{\"status\":\"error\",\"msg\":\"登录失败\"}"); -// out.flush(); -// out.close(); -// } -// }) -// .permitAll() -// .loginProcessingUrl("/user/login") -// .usernameParameter("username") -// .passwordParameter("password") -// .permitAll() -// .and() -// .logout() -// .permitAll() -// .and() -// .csrf() -// .disable(); -// } -// -// @Override -// protected void configure(AuthenticationManagerBuilder auth) throws Exception { -// auth.userDetailsService(userDetailsServiceImpl());//.passwordEncoder(new Md5PasswordEncoder()); -// } -// -// @Bean -// public UserDetailsServiceImpl userDetailsServiceImpl() { -// return new UserDetailsServiceImpl(); -// } -// -// @Bean -// public MyUsernamePasswordAuthenticationFilter myUsernamePasswordAuthenticationFilter() throws Exception { -// MyUsernamePasswordAuthenticationFilter myFilter = new MyUsernamePasswordAuthenticationFilter(); -// myFilter.setAuthenticationManager(authenticationManagerBean()); -// myFilter.setAuthenticationSuccessHandler(authenticationSuccessHandler()); -// myFilter.setAuthenticationFailureHandler(authenticationFailureHandler()); -// myFilter.setRememberMeServices(tokenBasedRememberMeServices()); -// return myFilter; -// } -// -// @Bean -// public AuthenticationSuccessHandler authenticationSuccessHandler() { -// return new SimpleUrlAuthenticationSuccessHandler("/login/success"); -// } -// -// @Bean -// public AuthenticationFailureHandler authenticationFailureHandler() { -// return new SimpleUrlAuthenticationFailureHandler("/login/failure"); -// } -// -// @Override -// public void configure(WebSecurity web) throws Exception { -// web.ignoring().antMatchers("/statics/lib/**", "**/css/**", "**/js/**", "**/img/**"); -// } -// -// @Autowired -// public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { -// //在内存中创建了一个用户,该用户的名称为user,密码为password,用户角色为ADMIN -// auth.inMemoryAuthentication() -// .withUser("user").password("password").roles("ADMIN"); -// } -//} -// diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java index f2261ba4..4666a2c8 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java @@ -6,6 +6,7 @@ import org.springframework.core.annotation.Order; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.RememberMeAuthenticationProvider; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; @@ -21,9 +22,10 @@ import org.springframework.security.web.authentication.rememberme.RememberMeAuth import org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices; import org.springframework.util.DigestUtils; +@Order(1) @Configuration @EnableWebSecurity -@Order(1) +@EnableGlobalMethodSecurity(prePostEnabled = true) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean @@ -37,38 +39,34 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { */ @Override public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/statics/lib/**", "/css/**", "/js/**", "/img/**"); + web.ignoring().antMatchers("/statics/lib/**", "/css/**", "/js/**", "/img/**", "/swagger-resources", "/v2/api-docs"); } @Override protected void configure(HttpSecurity http) throws Exception { + String loginPage = "/statics/manage/login.html"; + http.authorizeRequests().antMatchers("/login/**").permitAll()//为了测试其他功能,设置“ /** ”允许所有请求 - // user权限可以访问的请求 - .antMatchers("/security/user").hasRole("user") - // admin权限可以访问的请求 - .antMatchers("/security/admin").hasRole("admin") - // SpEL表达式:需要拥有user权限,且进行了完全认证 - .antMatchers("/user/account").access("hasRole('user') and isFullyAuthenticated()") - // 其他地址的访问均需验证权限(需要登录) + .antMatchers("/document.html").hasAuthority("DOC_ALL") + // 其他地址的访问均需登录 .anyRequest().authenticated().and() // 添加验证码验证 - .addFilterAt(myUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class).exceptionHandling() - .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/statics/manage/login.html")).and() - .addFilterAt(rememberMeAuthenticationFilter(), RememberMeAuthenticationFilter.class) + .addFilterAt(myUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class) + .exceptionHandling() + .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint(loginPage)) + .and().addFilterAt(rememberMeAuthenticationFilter(), RememberMeAuthenticationFilter.class) // 指定登录页面的请求路径 - .formLogin().loginPage("/statics/manage/login.html") + .formLogin().loginPage(loginPage) // 登陆处理路径 - .loginProcessingUrl("/login").permitAll().and() - // 退出请求的默认路径为logout,下面改为signout, - // 成功退出登录后的url可以用logoutSuccessUrl设置 - .logout().deleteCookies("remember-me") - .logoutUrl("/signout") - .logoutSuccessUrl("/statics/manage/login.html") - .permitAll().and() + .loginProcessingUrl("/login").permitAll() + // 退出请求的默认路径为logout + .and().logout().deleteCookies("remember-me") + .logoutUrl("/logout").logoutSuccessUrl(loginPage) + .permitAll() // 开启rememberMe,设置一个私钥专供testall项目使用,注意与下面TokenBasedRememberMeServices的key保持一致 // .rememberMe().key("testallKey").and() // 关闭csrf - .csrf().disable(); + .and().csrf().disable(); } @Override @@ -81,19 +79,20 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { } @Override public boolean matches(CharSequence charSequence, String s) { - return s.equals(DigestUtils.md5DigestAsHex(charSequence.toString().getBytes())); + String digestAsHex = DigestUtils.md5DigestAsHex(charSequence.toString().getBytes()); + return s.equals(digestAsHex); } }).and().authenticationProvider(rememberMeAuthenticationProvider()); } @Bean - public UserDetailsServiceImpl userDetailsServiceImpl() { - return new UserDetailsServiceImpl(); + public DocDetailsServiceImpl userDetailsServiceImpl() { + return new DocDetailsServiceImpl(); } @Bean - public MyUsernamePasswordAuthenticationFilter myUsernamePasswordAuthenticationFilter() throws Exception { - MyUsernamePasswordAuthenticationFilter myFilter = new MyUsernamePasswordAuthenticationFilter(); + public DocUsernamePasswordAuthenticationFilter myUsernamePasswordAuthenticationFilter() throws Exception { + DocUsernamePasswordAuthenticationFilter myFilter = new DocUsernamePasswordAuthenticationFilter(); myFilter.setAuthenticationManager(authenticationManagerBean()); myFilter.setAuthenticationSuccessHandler(authenticationSuccessHandler()); myFilter.setAuthenticationFailureHandler(authenticationFailureHandler()); @@ -133,5 +132,5 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { RememberMeAuthenticationFilter myFilter = new RememberMeAuthenticationFilter(authenticationManagerBean(), tokenBasedRememberMeServices()); return myFilter; } - + } \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/exception/GlobalHandlerExceptionResolver.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/exception/GlobalHandlerExceptionResolver.java new file mode 100644 index 00000000..405042e2 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/exception/GlobalHandlerExceptionResolver.java @@ -0,0 +1,119 @@ +package com.zyplayer.doc.manage.framework.exception; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver; + +import com.alibaba.fastjson.JSON; +import com.zyplayer.doc.core.exception.ConfirmException; +import com.zyplayer.doc.core.json.DocResponseJson; +import com.zyplayer.doc.core.json.ResponseJson; + +/** + * 全局异常处理器 + */ +@Component +public class GlobalHandlerExceptionResolver extends SimpleMappingExceptionResolver { + private static final Logger LOGGER = LoggerFactory.getLogger(GlobalHandlerExceptionResolver.class); + + @Override + public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { + LOGGER.error("---自定义异常处理---", ex); + request.setAttribute("throwable", ex); + ModelAndView mv = new ModelAndView(); + response.setStatus(HttpStatus.OK.value());// 设置状态码 + response.setContentType(MediaType.APPLICATION_JSON_VALUE);// 设置ContentType + response.setCharacterEncoding("UTF-8");// 避免乱码 + response.setHeader("Cache-Control", "no-cache, must-revalidate"); + DocResponseJson responseJson = null; + if (ex instanceof ConfirmException) {// 提示性异常 + responseJson = DocResponseJson.warn(ex.getMessage()); + } else if (ex instanceof AccessDeniedException) {// 没权限 + responseJson = DocResponseJson.warn("您没有权限访问本接口"); + } else {// 其他异常 + responseJson = DocResponseJson.warn("系统错误"); + } + boolean isResponseBody = isResponseBody(handler);// 是否返回body + // 返回页面或者返回内容处理 + if (!isResponseBody) { + mv.addObject("errJson", responseJson); + String customErrPage = (String) request.getAttribute("customErrPage"); + // 有定义过错误页面的直接返回自定义的错误页面 + if(StringUtils.isNotBlank(customErrPage)) { + mv.setViewName(customErrPage); + } else {// 否则返回默认的错误页面 + mv.setViewName("/statics/common/500.html"); + } + } else { + try { + String jsonStr = JSON.toJSONString(responseJson); + response.getWriter().write(jsonStr); + } catch (IOException e) { + e.printStackTrace(); + } + } + return mv; + } + + /** + * 如果是HttpMessageNotReadableException 则获取错误字段 + * @param exception + * @return + */ + public static String getExceptionField(String exception) { + Pattern pattern = Pattern.compile("Unrecognized field \"(\\w*)[$\"]"); + Matcher matcher = pattern.matcher(exception); + String field = ""; + if (matcher.find()) { + field = matcher.group(1); + } else { + pattern = Pattern.compile("Field error in object '.+' on field '(\\w+)'"); + matcher = pattern.matcher(exception); + if (matcher.find()) { + field = matcher.group(1); + } + } + return field; + } + + /** + * 是否返回body + * @author + * @since 2017年5月11日 + * @param handler + * @return + */ + private boolean isResponseBody(Object handler){ + if (handler instanceof HandlerMethod) { + HandlerMethod mathod = (HandlerMethod) handler; + ResponseBody body = mathod.getMethodAnnotation(ResponseBody.class); + if(body == null){ + RestController restController = mathod.getMethod().getDeclaringClass().getAnnotation(RestController.class); + if(restController == null){ + if(!mathod.getMethod().getReturnType().isAssignableFrom(ResponseJson.class)){ + return false; + } + } + } + } + return true; + } + +} + diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/AuthInfo.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/AuthInfo.java new file mode 100644 index 00000000..7d67749d --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/AuthInfo.java @@ -0,0 +1,105 @@ +package com.zyplayer.doc.manage.repository.manage.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; + +/** + *

+ * + *

+ * + * @author 暮光:城中城 + * @since 2018-12-05 + */ +public class AuthInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键自增ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 权限名 + */ + private String authName; + + /** + * 权限说明 + */ + private String authDesc; + + /** + * 是否可编辑 0=否 1=是 + */ + private Integer canEdit; + + /** + * 创建人 + */ + private Long createUid; + + /** + * 创建时间 + */ + private Date creationTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + public String getAuthName() { + return authName; + } + + public void setAuthName(String authName) { + this.authName = authName; + } + public String getAuthDesc() { + return authDesc; + } + + public void setAuthDesc(String authDesc) { + this.authDesc = authDesc; + } + public Integer getCanEdit() { + return canEdit; + } + + public void setCanEdit(Integer canEdit) { + this.canEdit = canEdit; + } + public Long getCreateUid() { + return createUid; + } + + public void setCreateUid(Long createUid) { + this.createUid = createUid; + } + public Date getCreationTime() { + return creationTime; + } + + public void setCreationTime(Date creationTime) { + this.creationTime = creationTime; + } + + @Override + public String toString() { + return "AuthInfo{" + + "id=" + id + + ", authName=" + authName + + ", authDesc=" + authDesc + + ", canEdit=" + canEdit + + ", createUid=" + createUid + + ", creationTime=" + creationTime + + "}"; + } +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/UserAuth.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/UserAuth.java new file mode 100644 index 00000000..74dbf12b --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/UserAuth.java @@ -0,0 +1,131 @@ +package com.zyplayer.doc.manage.repository.manage.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; + +/** + *

+ * + *

+ * + * @author 暮光:城中城 + * @since 2018-12-05 + */ +public class UserAuth implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键自增ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 用户ID + */ + private Long userId; + + /** + * 权限ID + */ + private Long authId; + + /** + * 创建用户ID + */ + private Long createUid; + + /** + * 更新用户ID + */ + private Long updateUid; + + /** + * 是否删除 0=未删除 1=已删除 + */ + private Integer delFlag; + + /** + * 创建时间 + */ + private Date creationTime; + + /** + * 更新时间 + */ + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + public Long getAuthId() { + return authId; + } + + public void setAuthId(Long authId) { + this.authId = authId; + } + public Long getCreateUid() { + return createUid; + } + + public void setCreateUid(Long createUid) { + this.createUid = createUid; + } + public Long getUpdateUid() { + return updateUid; + } + + public void setUpdateUid(Long updateUid) { + this.updateUid = updateUid; + } + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } + public Date getCreationTime() { + return creationTime; + } + + public void setCreationTime(Date creationTime) { + this.creationTime = creationTime; + } + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + @Override + public String toString() { + return "UserAuth{" + + "id=" + id + + ", userId=" + userId + + ", authId=" + authId + + ", createUid=" + createUid + + ", updateUid=" + updateUid + + ", delFlag=" + delFlag + + ", creationTime=" + creationTime + + ", updateTime=" + updateTime + + "}"; + } +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/UserInfo.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/UserInfo.java new file mode 100644 index 00000000..4a0ea170 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/entity/UserInfo.java @@ -0,0 +1,157 @@ +package com.zyplayer.doc.manage.repository.manage.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; + +/** + *

+ * + *

+ * + * @author 暮光:城中城 + * @since 2018-12-05 + */ +public class UserInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键自增ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 用户编号,用于登录等 + */ + private String userNo; + + /** + * 密码 + */ + private String password; + + /** + * 用户名 + */ + private String userName; + + /** + * 邮箱 + */ + private String email; + + /** + * 头像 + */ + private String avatar; + + /** + * 是否删除 0=未删除 1=已删除 + */ + private Integer delFlag; + + /** + * 创建人 + */ + private Long createUid; + + /** + * 创建时间 + */ + private Date creationTime; + + /** + * 修改时间 + */ + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + public String getUserNo() { + return userNo; + } + + public void setUserNo(String userNo) { + this.userNo = userNo; + } + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } + public Long getCreateUid() { + return createUid; + } + + public void setCreateUid(Long createUid) { + this.createUid = createUid; + } + public Date getCreationTime() { + return creationTime; + } + + public void setCreationTime(Date creationTime) { + this.creationTime = creationTime; + } + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + @Override + public String toString() { + return "UserInfo{" + + "id=" + id + + ", userNo=" + userNo + + ", password=" + password + + ", userName=" + userName + + ", email=" + email + + ", avatar=" + avatar + + ", delFlag=" + delFlag + + ", createUid=" + createUid + + ", creationTime=" + creationTime + + ", updateTime=" + updateTime + + "}"; + } +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/AuthInfoMapper.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/AuthInfoMapper.java new file mode 100644 index 00000000..66b7ca6e --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/AuthInfoMapper.java @@ -0,0 +1,16 @@ +package com.zyplayer.doc.manage.repository.manage.mapper; + +import com.zyplayer.doc.manage.repository.manage.entity.AuthInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-03 + */ +public interface AuthInfoMapper extends BaseMapper { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/UserAuthMapper.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/UserAuthMapper.java new file mode 100644 index 00000000..cd157ede --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/UserAuthMapper.java @@ -0,0 +1,16 @@ +package com.zyplayer.doc.manage.repository.manage.mapper; + +import com.zyplayer.doc.manage.repository.manage.entity.UserAuth; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-03 + */ +public interface UserAuthMapper extends BaseMapper { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/UserInfoMapper.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/UserInfoMapper.java new file mode 100644 index 00000000..190f340a --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/manage/mapper/UserInfoMapper.java @@ -0,0 +1,16 @@ +package com.zyplayer.doc.manage.repository.manage.mapper; + +import com.zyplayer.doc.manage.repository.manage.entity.UserInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-03 + */ +public interface UserInfoMapper extends BaseMapper { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/support/generator/CodeGenerator.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/support/generator/CodeGenerator.java index c09a192e..476fd11b 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/support/generator/CodeGenerator.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/repository/support/generator/CodeGenerator.java @@ -22,7 +22,8 @@ public class CodeGenerator { public static void main(String[] args) { final String moduleName = "manage"; - final String[] tableName = { "zyplayer_storage" }; + final String[] tableName = { "zyplayer_storage", "auth_info", "user_auth", "user_info" }; +// final String[] tableName = { "zyplayer_storage" }; // 代码生成器 AutoGenerator mpg = new AutoGenerator(); @@ -34,6 +35,7 @@ public class CodeGenerator { gc.setOpen(false); gc.setDateType(DateType.ONLY_DATE); gc.setServiceName("%sService"); + gc.setControllerName("Generator%sController"); mpg.setGlobalConfig(gc); // 数据源配置 @@ -42,14 +44,14 @@ public class CodeGenerator { // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername("root"); - dsc.setPassword("11111"); + dsc.setPassword("root"); mpg.setDataSource(dsc); // 包配置 final PackageConfig pc = new PackageConfig(); pc.setModuleName(null); pc.setParent("com.zyplayer.doc.manage"); - pc.setController("web"); + pc.setController("web.generator"); pc.setEntity("repository.manage.entity"); pc.setMapper("repository.manage.mapper"); pc.setService("service.manage"); diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/AuthInfoService.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/AuthInfoService.java new file mode 100644 index 00000000..c2cd0f07 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/AuthInfoService.java @@ -0,0 +1,16 @@ +package com.zyplayer.doc.manage.service.manage; + +import com.zyplayer.doc.manage.repository.manage.entity.AuthInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-03 + */ +public interface AuthInfoService extends IService { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/UserAuthService.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/UserAuthService.java new file mode 100644 index 00000000..6162deeb --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/UserAuthService.java @@ -0,0 +1,16 @@ +package com.zyplayer.doc.manage.service.manage; + +import com.zyplayer.doc.manage.repository.manage.entity.UserAuth; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-03 + */ +public interface UserAuthService extends IService { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/UserInfoService.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/UserInfoService.java new file mode 100644 index 00000000..1ecfcd7e --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/UserInfoService.java @@ -0,0 +1,16 @@ +package com.zyplayer.doc.manage.service.manage; + +import com.zyplayer.doc.manage.repository.manage.entity.UserInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-03 + */ +public interface UserInfoService extends IService { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/AuthInfoServiceImpl.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/AuthInfoServiceImpl.java new file mode 100644 index 00000000..713943f8 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/AuthInfoServiceImpl.java @@ -0,0 +1,20 @@ +package com.zyplayer.doc.manage.service.manage.impl; + +import com.zyplayer.doc.manage.repository.manage.entity.AuthInfo; +import com.zyplayer.doc.manage.repository.manage.mapper.AuthInfoMapper; +import com.zyplayer.doc.manage.service.manage.AuthInfoService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-03 + */ +@Service +public class AuthInfoServiceImpl extends ServiceImpl implements AuthInfoService { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/UserAuthServiceImpl.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/UserAuthServiceImpl.java new file mode 100644 index 00000000..e2f89b0b --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/UserAuthServiceImpl.java @@ -0,0 +1,20 @@ +package com.zyplayer.doc.manage.service.manage.impl; + +import com.zyplayer.doc.manage.repository.manage.entity.UserAuth; +import com.zyplayer.doc.manage.repository.manage.mapper.UserAuthMapper; +import com.zyplayer.doc.manage.service.manage.UserAuthService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-03 + */ +@Service +public class UserAuthServiceImpl extends ServiceImpl implements UserAuthService { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/UserInfoServiceImpl.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/UserInfoServiceImpl.java new file mode 100644 index 00000000..f853ad08 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/service/manage/impl/UserInfoServiceImpl.java @@ -0,0 +1,20 @@ +package com.zyplayer.doc.manage.service.manage.impl; + +import com.zyplayer.doc.manage.repository.manage.entity.UserInfo; +import com.zyplayer.doc.manage.repository.manage.mapper.UserInfoMapper; +import com.zyplayer.doc.manage.service.manage.UserInfoService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-03 + */ +@Service +public class UserInfoServiceImpl extends ServiceImpl implements UserInfoService { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorAuthInfoController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorAuthInfoController.java new file mode 100644 index 00000000..7a424084 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorAuthInfoController.java @@ -0,0 +1,20 @@ +package com.zyplayer.doc.manage.web.generator; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-05 + */ +@RestController +@RequestMapping("/auth-info") +public class GeneratorAuthInfoController { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorUserAuthController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorUserAuthController.java new file mode 100644 index 00000000..6b81179a --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorUserAuthController.java @@ -0,0 +1,20 @@ +package com.zyplayer.doc.manage.web.generator; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-05 + */ +@RestController +@RequestMapping("/user-auth") +public class GeneratorUserAuthController { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorUserInfoController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorUserInfoController.java new file mode 100644 index 00000000..3605cc14 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorUserInfoController.java @@ -0,0 +1,20 @@ +package com.zyplayer.doc.manage.web.generator; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-05 + */ +@RestController +@RequestMapping("/user-info") +public class GeneratorUserInfoController { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorZyplayerStorageController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorZyplayerStorageController.java new file mode 100644 index 00000000..cc3c3661 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/generator/GeneratorZyplayerStorageController.java @@ -0,0 +1,20 @@ +package com.zyplayer.doc.manage.web.generator; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author 暮光:城中城 + * @since 2018-12-05 + */ +@RestController +@RequestMapping("/zyplayer-storage") +public class GeneratorZyplayerStorageController { + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/AuthInfoController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/AuthInfoController.java new file mode 100644 index 00000000..1cb7bd6d --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/AuthInfoController.java @@ -0,0 +1,63 @@ +package com.zyplayer.doc.manage.web.manage; + +import java.util.Date; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.zyplayer.doc.core.json.DocResponseJson; +import com.zyplayer.doc.core.json.ResponseJson; +import com.zyplayer.doc.manage.framework.config.security.DocUserDetails; +import com.zyplayer.doc.manage.framework.config.security.DocUserUtil; +import com.zyplayer.doc.manage.repository.manage.entity.AuthInfo; +import com.zyplayer.doc.manage.service.manage.AuthInfoService; + +@RestController +@RequestMapping("/auth/info") +@PreAuthorize("hasAuthority('AUTH_MANAGE')") +public class AuthInfoController { + + @Autowired + AuthInfoService authInfoService; + + @PostMapping("/list") + public ResponseJson list() { + List authList = authInfoService.list(); + return DocResponseJson.ok(authList); + } + + @PostMapping("/delete") + public ResponseJson delete(Long id) { + AuthInfo authInfo = authInfoService.getById(id); + if (authInfo == null || authInfo.getCanEdit() == 0) { + return DocResponseJson.warn("该权限不允许删除"); + } + authInfoService.removeById(id); + return DocResponseJson.ok(); + } + + @PostMapping("/update") + public ResponseJson update(Long id, String authName, String authDesc) { + AuthInfo authInfo = new AuthInfo(); + authInfo.setAuthDesc(authDesc); + authInfo.setAuthName(authName); + if (id != null && id > 0) { + AuthInfo authInfoSel = authInfoService.getById(id); + if (authInfoSel == null || authInfoSel.getCanEdit() == 0) { + return DocResponseJson.warn("该权限不允许编辑"); + } + authInfo.setId(id); + authInfoService.updateById(authInfo); + } else { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + authInfo.setCreationTime(new Date()); + authInfo.setCreateUid(currentUser.getUserId()); + authInfoService.save(authInfo); + } + return DocResponseJson.ok(); + } +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/HelloController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/HelloController.java deleted file mode 100644 index e815af01..00000000 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/HelloController.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.zyplayer.doc.manage.web.manage; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; - -@Controller -public class HelloController { - -// @RequestMapping("/") -// public String index() { -// return "manage/index"; -// } -// -// @RequestMapping("/hello") -// public String hello() { -// return "manage/hello"; -// } -// -// @RequestMapping("/login") -// public String login() { -// return "statics/manage/hello.html"; -// } -} \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/LoginController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/LoginController.java new file mode 100644 index 00000000..67b8f5d4 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/LoginController.java @@ -0,0 +1,58 @@ +package com.zyplayer.doc.manage.web.manage; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.WebAttributes; +import org.springframework.security.web.savedrequest.HttpSessionRequestCache; +import org.springframework.security.web.savedrequest.RequestCache; +import org.springframework.security.web.savedrequest.SavedRequest; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import com.zyplayer.doc.core.json.DocResponseJson; + +@RestController +public class LoginController { + private RequestCache requestCache = new HttpSessionRequestCache(); + + @GetMapping(value = "/login") + public ModelAndView loginPage(HttpServletRequest request) { + return new ModelAndView("/statics/manage/login.html"); + } + + /** + * 如果是访问受限页面后,跳转到登录页的,则在targetUrl保存之前受限页面的路径,供页面调用 + * + * @param request + * @param response + * @return + */ + @GetMapping(value = "/login/success") + public DocResponseJson loginSuccess(HttpServletRequest request, HttpServletResponse response) { + SavedRequest savedRequest = requestCache.getRequest(request, response); + String targetUrl = null; + if (savedRequest != null) { + targetUrl = savedRequest.getRedirectUrl(); + } + if (StringUtils.isBlank(targetUrl)) { + targetUrl = "/"; + } + return DocResponseJson.ok(targetUrl); + } + + /** + * 获取异常信息返回给页面 + * @param request + * @param response + * @return + */ + @GetMapping(value = "/login/failure") + public DocResponseJson loginFailure(HttpServletRequest request, HttpServletResponse response) { + AuthenticationException ae = (AuthenticationException) request.getSession().getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION); + return DocResponseJson.warn(ae.getMessage()); + } +} \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserAuthController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserAuthController.java new file mode 100644 index 00000000..0b0dc664 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserAuthController.java @@ -0,0 +1,70 @@ +package com.zyplayer.doc.manage.web.manage; + +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.zyplayer.doc.core.json.DocResponseJson; +import com.zyplayer.doc.core.json.ResponseJson; +import com.zyplayer.doc.manage.framework.config.security.DocUserDetails; +import com.zyplayer.doc.manage.framework.config.security.DocUserUtil; +import com.zyplayer.doc.manage.repository.manage.entity.AuthInfo; +import com.zyplayer.doc.manage.repository.manage.entity.UserAuth; +import com.zyplayer.doc.manage.service.manage.AuthInfoService; +import com.zyplayer.doc.manage.service.manage.UserAuthService; + +@RestController +@RequestMapping("/user/auth") +@PreAuthorize("hasAuthority('AUTH_ASSIGN')") +public class UserAuthController { + + @Autowired + AuthInfoService authInfoService; + @Autowired + UserAuthService userAuthService; + + @PostMapping("/list") + public ResponseJson list(Long userId) { + QueryWrapper userAuthWrapper = new QueryWrapper<>(); + userAuthWrapper.eq("user_id", userId); + List userAuthList = userAuthService.list(userAuthWrapper); + if (userAuthList == null || userAuthList.isEmpty()) { + return DocResponseJson.ok(); + } + QueryWrapper authQueryWrapper = new QueryWrapper<>(); + authQueryWrapper.in("id", userAuthList.stream().collect(Collectors.mapping(UserAuth::getAuthId, Collectors.toList()))); + List authList = authInfoService.list(authQueryWrapper); + return DocResponseJson.ok(authList); + } + + @PostMapping("/delete") + public ResponseJson delete(Long id) { + userAuthService.removeById(id); + return DocResponseJson.ok(); + } + + @PostMapping("/insert") + public ResponseJson insert(Long id, Long userId, Long authId) { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + UserAuth userAuth = new UserAuth(); + userAuth.setAuthId(authId); + userAuth.setUserId(userId); + if (id != null && id > 0) { + userAuth.setId(id); + userAuthService.updateById(userAuth); + } else { + userAuth.setCreationTime(new Date()); + userAuth.setCreateUid(currentUser.getUserId()); + userAuthService.save(userAuth); + } + return DocResponseJson.ok(); + } + +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserController.java deleted file mode 100644 index a076cdc5..00000000 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserController.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.zyplayer.doc.manage.web.manage; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.web.WebAttributes; -import org.springframework.security.web.savedrequest.HttpSessionRequestCache; -import org.springframework.security.web.savedrequest.RequestCache; -import org.springframework.security.web.savedrequest.SavedRequest; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.ModelAndView; - -import com.zyplayer.doc.manage.framework.config.security.MyUserDetails; -import com.zyplayer.doc.manage.framework.config.security.UserUtil; - -@RestController -public class UserController { - private RequestCache requestCache = new HttpSessionRequestCache(); - - @RequestMapping(value = "/login_page", method = RequestMethod.GET) - public ModelAndView loginPage(HttpServletRequest request) { - if (true) { - return new ModelAndView("/login/ajax"); - } else { - return new ModelAndView("login.html"); - } - - } - - /** - * 如果是访问受限页面后,跳转到登录页的,则在targetUrl保存之前受限页面的路径,供页面调用 - * - * @param request - * @param response - * @return - */ - @RequestMapping(value = "/login/success", method = RequestMethod.GET) - public Map loginSuccess(HttpServletRequest request, HttpServletResponse response) { - SavedRequest savedRequest = requestCache.getRequest(request, response); - String targetUrl = null; - if (savedRequest != null) { - targetUrl = savedRequest.getRedirectUrl(); - } - Map result = new HashMap(); - result.put("success", true); - result.put("targetUrl", targetUrl); - return result; - } - - /** - * 获取异常信息返回给页面 - * @param request - * @param response - * @return - */ - @RequestMapping(value = "/login/failure", method = RequestMethod.GET) - public Map loginFailure(HttpServletRequest request, HttpServletResponse response) { - AuthenticationException ae = (AuthenticationException) request.getSession().getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION); - Map result = new HashMap(); - result.put("success", false); - result.put("message", ae.getMessage()); - return result; - } - - @RequestMapping(value = "/login/ajax", method = RequestMethod.GET) - public Map loginAjax() { - Map result = new HashMap(); - result.put("success", false); - result.put("message", "you need login!"); - return result; - } - - @RequestMapping(value = "/security/user", method = RequestMethod.GET) - public Map securityUser(HttpServletRequest request) { - MyUserDetails user = UserUtil.getCurrentUser(); - Map result = new HashMap(); - StringBuilder userRole = new StringBuilder(); - if (user != null) { - result.put("userId", user.getUserId()); - result.put("userName", user.getUsername()); - Collection roleLst = user.getAuthorities(); - for (GrantedAuthority sga : roleLst) { - userRole.append(sga.toString() + "; "); - } - } - result.put("userRole", userRole.toString()); - result.put("message", "This message is only visible to the user"); - return result; - } - - @RequestMapping(value = "/security/admin", method = RequestMethod.GET) - public Map securityAdmin(HttpServletRequest request) { - MyUserDetails user = UserUtil.getCurrentUser(); - Map result = new HashMap(); - StringBuilder userRole = new StringBuilder(); - if (user != null) { - result.put("userId", user.getUserId()); - result.put("userName", user.getUsername()); - Collection roleLst = user.getAuthorities(); - for (GrantedAuthority sga : roleLst) { - userRole.append(sga.toString() + "; "); - } - } - result.put("userRole", userRole.toString()); - result.put("message", "This message is only visible to the admin"); - return result; - } - - @RequestMapping(value = "/user/account", method = RequestMethod.GET) - public Map getUserAcctunt(HttpServletRequest request) { - Map result = new HashMap(); - result.put("message", "需要进行完整认证的请求(不是通过Remember-me功能进行的认证)"); - return result; - } -} \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserInfoController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserInfoController.java new file mode 100644 index 00000000..11acd6f8 --- /dev/null +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/manage/UserInfoController.java @@ -0,0 +1,62 @@ +package com.zyplayer.doc.manage.web.manage; + +import java.util.Date; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.zyplayer.doc.core.json.DocResponseJson; +import com.zyplayer.doc.core.json.ResponseJson; +import com.zyplayer.doc.manage.framework.config.security.DocUserDetails; +import com.zyplayer.doc.manage.framework.config.security.DocUserUtil; +import com.zyplayer.doc.manage.repository.manage.entity.UserInfo; +import com.zyplayer.doc.manage.service.manage.UserInfoService; + +@RestController +@RequestMapping("/user/info") +@PreAuthorize("hasAuthority('USER_MANAGE')") +public class UserInfoController { + + @Autowired + UserInfoService userInfoService; + + @PostMapping("/list") + public ResponseJson list(String userName) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (StringUtils.isNotBlank(userName)) { + queryWrapper.like("user_name", userName); + } + List userInfoList = userInfoService.list(queryWrapper); + return DocResponseJson.ok(userInfoList); + } + + @PostMapping("/delete") + public ResponseJson delete(Long id) { + UserInfo userInfo = new UserInfo(); + userInfo.setId(id); + userInfo.setDelFlag(1); + userInfo.setUpdateTime(new Date()); + userInfoService.updateById(userInfo); + return DocResponseJson.ok(); + } + + @PostMapping("/update") + public ResponseJson update(UserInfo userInfo) { + if (userInfo.getId() != null && userInfo.getId() > 0) { + userInfo.setUpdateTime(new Date()); + userInfoService.updateById(userInfo); + } else { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + userInfo.setCreationTime(new Date()); + userInfo.setCreateUid(currentUser.getUserId()); + userInfoService.save(userInfo); + } + return DocResponseJson.ok(); + } +} diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/swagger/ZyplayerStorageController.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/swagger/ZyplayerStorageController.java index 5990617a..ae9f0f06 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/swagger/ZyplayerStorageController.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/web/swagger/ZyplayerStorageController.java @@ -6,16 +6,8 @@ import org.springframework.web.bind.annotation.RestController; import com.zyplayer.doc.manage.repository.manage.mapper.ZyplayerStorageMapper; -/** - *

- * 前端控制器 - *

- * - * @author 暮光:城中城 - * @since 2018-11-27 - */ @RestController -@RequestMapping("/zyplayer-storage") +@RequestMapping("/zyplayer/storage") public class ZyplayerStorageController { @Autowired diff --git a/zyplayer-doc-manage/src/main/resources/application.yml b/zyplayer-doc-manage/src/main/resources/application.yml index c9419a2e..a992f5d9 100644 --- a/zyplayer-doc-manage/src/main/resources/application.yml +++ b/zyplayer-doc-manage/src/main/resources/application.yml @@ -27,7 +27,7 @@ spring: server: port: 8082 servlet: - context-path: / + context-path: /zyplayer-doc-manage diff --git a/zyplayer-doc-manage/src/main/resources/mapper/manage/AuthInfoMapper.xml b/zyplayer-doc-manage/src/main/resources/mapper/manage/AuthInfoMapper.xml new file mode 100644 index 00000000..118a080c --- /dev/null +++ b/zyplayer-doc-manage/src/main/resources/mapper/manage/AuthInfoMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/zyplayer-doc-manage/src/main/resources/mapper/manage/UserAuthMapper.xml b/zyplayer-doc-manage/src/main/resources/mapper/manage/UserAuthMapper.xml new file mode 100644 index 00000000..3e039ecc --- /dev/null +++ b/zyplayer-doc-manage/src/main/resources/mapper/manage/UserAuthMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/zyplayer-doc-manage/src/main/resources/mapper/manage/UserInfoMapper.xml b/zyplayer-doc-manage/src/main/resources/mapper/manage/UserInfoMapper.xml new file mode 100644 index 00000000..653c3e07 --- /dev/null +++ b/zyplayer-doc-manage/src/main/resources/mapper/manage/UserInfoMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/zyplayer-doc-manage/src/main/webapp/statics/common/403.html b/zyplayer-doc-manage/src/main/webapp/statics/common/403.html new file mode 100644 index 00000000..f467cedc --- /dev/null +++ b/zyplayer-doc-manage/src/main/webapp/statics/common/403.html @@ -0,0 +1,14 @@ + + + + + + + + + 403错误页面 + +
您没有权限访问此页面
+ + \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/webapp/statics/common/404.html b/zyplayer-doc-manage/src/main/webapp/statics/common/404.html new file mode 100644 index 00000000..5fba5b96 --- /dev/null +++ b/zyplayer-doc-manage/src/main/webapp/statics/common/404.html @@ -0,0 +1,14 @@ + + + + + + + + + 404错误页面 + +
您访问的页面不存在
+ + \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/webapp/statics/common/500.html b/zyplayer-doc-manage/src/main/webapp/statics/common/500.html new file mode 100644 index 00000000..8d49f79b --- /dev/null +++ b/zyplayer-doc-manage/src/main/webapp/statics/common/500.html @@ -0,0 +1,14 @@ + + + + + + + + + 500错误页面 + +
服务器错误
+ + \ No newline at end of file diff --git a/zyplayer-doc-manage/src/main/webapp/statics/lib/mg/js/common.js b/zyplayer-doc-manage/src/main/webapp/statics/lib/mg/js/common.js index 5f9f39cd..a2e33358 100644 --- a/zyplayer-doc-manage/src/main/webapp/statics/lib/mg/js/common.js +++ b/zyplayer-doc-manage/src/main/webapp/statics/lib/mg/js/common.js @@ -4,6 +4,14 @@ * @since 2017年5月7日 */ +var ctx = "/"; +var statics = "/statics/"; + +window.onload=function(){ + ctx = getCookie("ctx"); + statics = ctx + "statics/"; +} + function serialize(value) { if (typeof value === 'string') { return value; diff --git a/zyplayer-doc-manage/src/main/webapp/statics/manage/login.html b/zyplayer-doc-manage/src/main/webapp/statics/manage/login.html index 078db97f..a089a639 100644 --- a/zyplayer-doc-manage/src/main/webapp/statics/manage/login.html +++ b/zyplayer-doc-manage/src/main/webapp/statics/manage/login.html @@ -16,7 +16,7 @@
登录 您没有权限访问该内容或需要登录
-
+
@@ -29,10 +29,10 @@
- +
-
+ @@ -58,10 +58,10 @@ password: app.password, validateCode: "1234" }; - post("/login", param, function(result) { + post(ctx + "login", param, function(result) { + console.log(result); if(result.errCode == 200) { - //location.href = "/manage/web/home"; - alert("登录失败1," + result.errMsg); + location.href = result.data; } else { alert("登录失败," + result.errMsg); } diff --git a/zyplayer-doc-swagger/README.md b/zyplayer-doc-swagger/README.md index 06e053e0..fd49c22f 100644 --- a/zyplayer-doc-swagger/README.md +++ b/zyplayer-doc-swagger/README.md @@ -1,23 +1,23 @@ -# swagger-mg-ui +# zyplayer-doc-swagger #### 项目介绍 -swagger-mg-ui是swagger的一个前端实现,使用简单、解析速度快、走心的设计,支持多项目同时展示,多种文档目录的展示方案,多种自定义配置,满足各种使用习惯,使用中您有任何的意见和建议都可到源码地址处反馈哦! +zyplayer-doc-swagger是swagger的一个前端实现,使用简单、解析速度快、走心的设计,支持多项目同时展示,多种文档目录的展示方案,多种自定义配置,满足各种使用习惯,使用中您有任何的意见和建议都可到源码地址处反馈哦! 每一行代码都是从头开始写的,所以每一个问题都能及时得到解决 欢迎多多Star!右上角↗ demo代码地址: -[swagger-mg-ui-demo](https://gitee.com/zyplayer/swagger-mg-ui-demo) +[zyplayer-doc-swagger-demo](https://gitee.com/zyplayer/zyplayer-doc-swagger-demo) 已上传至中央仓库,使用方法: 1、添加依赖 ``` - + com.zyplayer - swagger-mg-ui + zyplayer-doc-swagger 1.0.6 ``` @@ -64,7 +64,7 @@ maven项目,前端由html、js、css组成的,后端使用java,前端框 #### 建议: 1. 单项目文档不要添加@EnableSwaggerMgUi注解 -2. 多项目时建议不要引入文档UI包,只需要引入springfox-swagger2包,单独部署一个项目添加swagger-mg-ui包,增加@EnableSwaggerMgUi注解,再实现MgStorageService类,部署后用于专门的文档管理项目,再在文档页面“添加文档”,管理所有项目的文档,真正实现文档和项目分离管理! +2. 多项目时建议不要引入文档UI包,只需要引入springfox-swagger2包,单独部署一个项目添加zyplayer-doc-swagger包,增加@EnableSwaggerMgUi注解,再实现MgStorageService类,部署后用于专门的文档管理项目,再在文档页面“添加文档”,管理所有项目的文档,真正实现文档和项目分离管理! 欢迎加入群聊讨论: diff --git a/zyplayer-doc-swagger/pom.xml b/zyplayer-doc-swagger/pom.xml index 19cf1cc4..e53ab999 100644 --- a/zyplayer-doc-swagger/pom.xml +++ b/zyplayer-doc-swagger/pom.xml @@ -28,6 +28,16 @@ spring-boot-starter-parent 1.4.2.RELEASE + + + UTF-8 + UTF-8 + 1.8 + + true + ${project.build.outputDirectory}/META-INF/resources/webjars/${project.artifactId}/${project.version} + 1.0.0 + @@ -54,16 +64,13 @@ commons-lang 2.6 + + com.zyplayer + zyplayer-doc-core + ${zyplayer.doc.core.version} + - - UTF-8 - UTF-8 - 1.8 - - true - ${project.build.outputDirectory}/META-INF/resources/webjars/${project.artifactId}/${project.version} - The Apache Software License, Version 2.0 diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgHttpRequestController.java b/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgHttpRequestController.java deleted file mode 100644 index 88759356..00000000 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgHttpRequestController.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.mg.swagger.controller; - -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.mg.swagger.controller.param.HttpRequestParam; -import com.mg.swagger.framework.json.MgUiResponseJson; -import com.mg.swagger.framework.json.ResponseJson; - -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; - -/** - * 后台代理网络请求的控制器 - * - * @author 暮光:城中城 - * @since 2018年8月21日 - */ -@RestController -@RequestMapping("/swagger-mg-ui/http") -public class MgHttpRequestController { - - @PostMapping(value = "/request") - public ResponseJson post(HttpRequestParam param) { - HttpRequest request = param.createRequest(); - HttpResponse execute = request.execute(); - return MgUiResponseJson.ok(execute); - } -} diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgStorageController.java b/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgStorageController.java deleted file mode 100644 index 22c1e6e6..00000000 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgStorageController.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.mg.swagger.controller; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.mg.swagger.framework.constant.Toast; -import com.mg.swagger.framework.json.MgUiResponseJson; -import com.mg.swagger.framework.service.MgStorageService; - -/** - * 后台存储服务控制器 - * - * @author 暮光:城中城 - * @since 2018年8月21日 - */ -@RestController -@RequestMapping("/swagger-mg-ui/storage") -public class MgStorageController { - - @Autowired(required = false) - private MgStorageService storageService; - - @PostMapping(value = "/checkConfig") - public MgUiResponseJson checkConfig() { - // 本接口能访问到而且实现了MgStorageService才算配置好了 - if (storageService == null) { - return MgUiResponseJson.error("服务不可用"); - } - return MgUiResponseJson.ok(); - } - - @PostMapping(value = "/data") - public MgUiResponseJson setData(String key, String value) { - if (storageService == null) { - return MgUiResponseJson.warn(Toast.AUTOWIRED_ERROR); - } - if (key == null || value == null) { - return MgUiResponseJson.warn("参数名或值不能为空"); - } - storageService.put(key, value); - return MgUiResponseJson.ok(); - } - - @PostMapping(value = "/delete") - public MgUiResponseJson delete(String key) { - if (storageService == null) { - return MgUiResponseJson.warn(Toast.AUTOWIRED_ERROR); - } - if (key == null) { - return MgUiResponseJson.warn("参数名不能为空"); - } - String value = storageService.get(key); - value = (value == null) ? "" : value; - return MgUiResponseJson.ok(value); - } - - @GetMapping(value = "/data") - public MgUiResponseJson getData(String key) { - if (storageService == null) { - return MgUiResponseJson.warn(Toast.AUTOWIRED_ERROR); - } - if (key == null) { - return MgUiResponseJson.warn("参数名不能为空"); - } - String value = storageService.get(key); - value = (value == null) ? "" : value; - return MgUiResponseJson.ok(value); - } -} \ No newline at end of file diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/configuration/SwaggerCommonConfiguration.java b/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/configuration/SwaggerCommonConfiguration.java deleted file mode 100644 index 50cfccf0..00000000 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/configuration/SwaggerCommonConfiguration.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.mg.swagger.framework.configuration; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; - -import com.mg.swagger.framework.filter.MgUiTestFilter; - -//@EnableAutoConfiguration -@ComponentScan(basePackages = { - "com.mg.swagger.controller", - "com.mg.swagger.framework.service", -}) -public class SwaggerCommonConfiguration { - - @Autowired - private MgUiTestFilter mgUiTestFilter; - - @Bean - public FilterRegistrationBean mockTestFilter() { - FilterRegistrationBean registration = new FilterRegistrationBean(); - registration.setFilter(mgUiTestFilter); - registration.addUrlPatterns("/*"); - registration.setName("mgUiTestFilter"); - registration.setOrder(2); - return registration; - } -} diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/json/MgUiResponseJson.java b/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/json/MgUiResponseJson.java deleted file mode 100644 index 72c6439c..00000000 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/json/MgUiResponseJson.java +++ /dev/null @@ -1,219 +0,0 @@ -package com.mg.swagger.framework.json; - -import java.io.IOException; -import java.net.HttpCookie; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import javax.servlet.http.HttpServletResponse; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.serializer.SerializeConfig; -import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; -import com.mg.swagger.controller.vo.HttpCookieVo; -import com.mg.swagger.controller.vo.HttpHeaderVo; - -import cn.hutool.http.HttpResponse; -import io.swagger.annotations.ApiModelProperty; - -/** - * MgUi返回数据格式 - * - * @author 暮光:城中城 - * @since 2018年8月21日 - */ -public class MgUiResponseJson implements ResponseJson { - private static SerializeConfig mapping = new SerializeConfig(); - static { - mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss")); - } - @ApiModelProperty(value = "状态码") - private Integer errCode; - @ApiModelProperty(value = "返回值说明") - private String errMsg; - @ApiModelProperty(value = "返回数据") - private Object data; - @ApiModelProperty(value = "代理请求返回的cookie") - private List cookie; - @ApiModelProperty(value = "代理请求返回的header") - private List header; - @ApiModelProperty(value = "代理请求返回的status") - private Integer status; - - public MgUiResponseJson() { - this.errCode = 200; - } - - public MgUiResponseJson(Object data) { - this.setData(data); - this.errCode = 200; - } - - public MgUiResponseJson(int errCode, String errMsg) { - super(); - this.errCode = errCode; - this.errMsg = errMsg; - } - - public MgUiResponseJson(int errCode, String errMsg, Object data) { - super(); - this.setData(data); - this.errCode = errCode; - this.errMsg = errMsg; - } - - public MgUiResponseJson(Integer errCode) { - super(); - this.errCode = errCode; - } - - public Integer getErrCode() { - return errCode; - } - - public void setErrCode(Integer errCode) { - this.errCode = errCode; - } - - public String getErrMsg() { - return errMsg; - } - - public void setErrMsg(String errMsg) { - this.errMsg = errMsg; - } - - public Object getData() { - return data; - } - - public void setData(Object data) { - this.data = data; - } - - /** - * 提示语 - * - * @author 暮光:城中城 - * @since 2018年8月7日 - * @return - */ - public static MgUiResponseJson warn(String errMsg) { - return new MgUiResponseJson(300, errMsg); - } - - /** - * 错误 - * - * @author 暮光:城中城 - * @since 2018年8月7日 - * @return - */ - public static MgUiResponseJson error(String errMsg) { - return new MgUiResponseJson(500, errMsg); - } - - /** - * 成功的返回方法 - * - * @author 暮光:城中城 - * @since 2018年8月7日 - * @return - */ - public static MgUiResponseJson ok() { - return new MgUiResponseJson(); - } - - /** - * 成功的返回方法 - * - * @author 暮光:城中城 - * @since 2018年8月7日 - * @return - */ - public static MgUiResponseJson ok(Object data) { - if (data == null) { - return MgUiResponseJson.ok(); - } - MgUiResponseJson responseJson = new MgUiResponseJson(); - if (data instanceof HttpResponse) { - HttpResponse response = (HttpResponse) data; - responseJson.setData(response.body()); - responseJson.setStatus(response.getStatus()); - List cookies = response.getCookies(); - if (cookies != null && cookies.size() > 0) { - List cookie = new ArrayList<>(cookies.size()); - for (HttpCookie httpCookie : cookies) { - HttpCookieVo vo = new HttpCookieVo(); - vo.setName(httpCookie.getName()); - vo.setValue(httpCookie.getValue()); - cookie.add(vo); - } - responseJson.setCookie(cookie); - } - Map> headers = response.headers(); - if (headers != null && headers.size() > 0) { - List header = new ArrayList<>(headers.size()); - for (Entry> httpHeader : headers.entrySet()) { - HttpHeaderVo vo = new HttpHeaderVo(); - vo.setName(httpHeader.getKey()); - vo.setValue(String.join(";", httpHeader.getValue())); - header.add(vo); - } - responseJson.setHeader(header); - } - } else { - responseJson.setData(data); - } - return responseJson; - } - - public String toJson() { - return JSON.toJSONString(this, mapping); - } - - public void send(HttpServletResponse response) { - try { - response.setStatus(200); - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); - response.setHeader("Cache-Control", "no-cache, must-revalidate"); - response.getWriter().write(toJson()); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public String toString() { - return "DefaultResponseJson [errCode=" + errCode + ", errMsg=" + errMsg + ", data=" + data + "]"; - } - - public List getCookie() { - return cookie; - } - - public void setCookie(List cookie) { - this.cookie = cookie; - } - - public List getHeader() { - return header; - } - - public void setHeader(List header) { - this.header = header; - } - - public Integer getStatus() { - return status; - } - - public void setStatus(Integer status) { - this.status = status; - } - -} diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgDocumentController.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgDocumentController.java similarity index 77% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgDocumentController.java rename to zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgDocumentController.java index 943169a5..1746d8e0 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/MgDocumentController.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgDocumentController.java @@ -1,4 +1,4 @@ -package com.mg.swagger.controller; +package com.zyplayer.doc.swagger.controller; import java.net.URLEncoder; import java.util.Arrays; @@ -24,13 +24,12 @@ import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; -import com.mg.swagger.framework.configuration.EnableSwaggerMgUi; -import com.mg.swagger.framework.configuration.SpringContextUtil; -import com.mg.swagger.framework.constant.StorageKeys; -import com.mg.swagger.framework.constant.Toast; -import com.mg.swagger.framework.json.MgUiResponseJson; -import com.mg.swagger.framework.json.ResponseJson; -import com.mg.swagger.framework.service.MgStorageService; +import com.zyplayer.doc.core.json.DocResponseJson; +import com.zyplayer.doc.core.json.ResponseJson; +import com.zyplayer.doc.swagger.framework.configuration.EnableSwaggerMgUi; +import com.zyplayer.doc.swagger.framework.configuration.SpringContextUtil; +import com.zyplayer.doc.swagger.framework.constant.StorageKeys; +import com.zyplayer.doc.swagger.framework.service.MgStorageService; import cn.hutool.http.HttpRequest; import springfox.documentation.swagger.web.SwaggerResource; @@ -47,7 +46,7 @@ public class MgDocumentController { private static Logger logger = LoggerFactory.getLogger(MgDocumentController.class); - @Autowired(required = false) + @Autowired private MgStorageService storageService; /** @@ -55,35 +54,30 @@ public class MgDocumentController { * * @author 暮光:城中城 * @since 2018年8月21日 + * @return 文档内容 */ @ResponseBody @PostMapping(value = "/resourcesList") - public ResponseJson resourcesList() { - if (storageService == null) { - return MgUiResponseJson.warn(Toast.AUTOWIRED_ERROR); - } + public ResponseJson> resourcesList() { String swaggerResourcesStr = storageService.get(StorageKeys.SWAGGER_RESOURCES_LIST); Set resourcesSet = new HashSet<>(); if (StringUtils.isNotBlank(swaggerResourcesStr)) { List resourcesList = JSON.parseArray(swaggerResourcesStr, String.class); resourcesSet.addAll(resourcesList); } - return MgUiResponseJson.ok(resourcesSet); + return DocResponseJson.ok(resourcesSet); } /** * 获取所有的文档 - * * @author 暮光:城中城 * @since 2018年8月21日 + * @param request request + * @param response response */ @ResponseBody @PostMapping(value = "/docs") public void docs(HttpServletRequest request, HttpServletResponse response) { - if (storageService == null) { - MgUiResponseJson.warn(Toast.AUTOWIRED_ERROR).send(response); - return; - } boolean needRestorage = true; String choiseDocList = request.getParameter("choiseDocList"); // 转成set,防止重复 @@ -123,15 +117,13 @@ public class MgDocumentController { if (swaggerMgUi == null) { resourcesSet.add(serverPath + "/swagger-resources"); } else { - boolean selfDoc = swaggerMgUi.selfDoc(); - if (selfDoc) { + if (swaggerMgUi.selfDoc()) { resourcesSet.add(serverPath + "/swagger-resources"); - } else { - // 启动后第一次访问没有数据情况下需要加载进来的swagger-resources地址 - String[] defaultResources = swaggerMgUi.defaultResources(); - if (defaultResources != null && defaultResources.length > 0) { - resourcesSet.addAll(Arrays.asList(defaultResources)); - } + } + // 启动后第一次访问没有数据情况下需要加载进来的swagger-resources地址 + String[] defaultResources = swaggerMgUi.defaultResources(); + if (defaultResources != null && defaultResources.length > 0) { + resourcesSet.addAll(Arrays.asList(defaultResources)); } } } @@ -195,7 +187,7 @@ public class MgDocumentController { storageService.put(StorageKeys.SWAGGER_RESOURCES_LIST, JSON.toJSONString(resourcesSet)); } // 用默认的json解析要内存溢出,解析不了JSONObject、、就只有这样写了~ - MgUiResponseJson.ok(swaggerResourceStrList).send(response); + DocResponseJson.ok(swaggerResourceStrList).send(response); } /** @@ -203,14 +195,11 @@ public class MgDocumentController { * * @author 暮光:城中城 * @since 2018年8月21日 - * @param resourcesUrl - * @return + * @param resourcesUrl swagger-resources地址 + * @return 添加结果 */ @PostMapping(value = "/addSwaggerResources") - public ResponseJson addSwaggerResources(String resourcesUrl) { - if (storageService == null) { - return MgUiResponseJson.warn(Toast.AUTOWIRED_ERROR); - } + public ResponseJson addSwaggerResources(String resourcesUrl) { String swaggerResourcesStr = storageService.get(StorageKeys.SWAGGER_RESOURCES_LIST); String swaggerDocsDeleteStr = storageService.get(StorageKeys.SWAGGER_DOCS_DELETE_LIST); Set swaggerDocsDeleteSet = new HashSet<>(); @@ -224,11 +213,12 @@ public class MgDocumentController { List resourcesList = JSON.parseArray(swaggerResourcesStr, String.class); resourcesSet.addAll(resourcesList); } + String resourcesStr = null; try { - String resourcesStr = HttpRequest.get(resourcesUrl).timeout(3000).execute().body(); + resourcesStr = HttpRequest.get(resourcesUrl).timeout(3000).execute().body(); List resourceList = JSON.parseArray(resourcesStr, SwaggerResource.class); if (resourceList == null || resourceList.isEmpty()) { - return MgUiResponseJson.warn("改地址未找到文档"); + return DocResponseJson.warn("该地址未找到文档"); } // 重新加入的时候把之前的已删除的回恢复 String resourcesDomain = resourcesUrl.substring(0, resourcesUrl.lastIndexOf("/") + 1); @@ -249,12 +239,28 @@ public class MgDocumentController { } resourcesSet.add(resourcesUrl); } catch (Exception e) { - logger.error("获取文档失败:{},{}", resourcesUrl, e.getMessage()); - return MgUiResponseJson.warn("改地址查找文档失败"); +// 暂不想支持直接添加地址 +// try { +// SwaggerLocationVo swaggerLocationVo = JSON.parseObject(resourcesStr, SwaggerLocationVo.class); +// if (StringUtils.isNotBlank(swaggerLocationVo.getSwagger())) { +// Set locationSet = new HashSet<>(); +// if (StringUtils.isNotBlank(swaggerLocationListStr)) { +// String swaggerLocationListStr = storageService.get(StorageKeys.SWAGGER_LOCATION_LIST); +// List locationList = JSON.parseArray(swaggerLocationListStr, String.class); +// locationSet.addAll(locationList); +// storageService.put(StorageKeys.SWAGGER_LOCATION_LIST, JSON.toJSONString(locationSet)); +// } +// } else { +// return DocResponseJson.warn("该地址查找文档失败"); +// } +// } catch (Exception e2) { + logger.error("获取文档失败:{},{}", resourcesUrl, e.getMessage()); + return DocResponseJson.warn("该地址查找文档失败"); +// } } storageService.put(StorageKeys.SWAGGER_RESOURCES_LIST, JSON.toJSONString(resourcesSet)); storageService.put(StorageKeys.SWAGGER_DOCS_DELETE_LIST, JSON.toJSONString(swaggerDocsDeleteSet)); - return MgUiResponseJson.ok(); + return DocResponseJson.ok(); } /** @@ -262,14 +268,11 @@ public class MgDocumentController { * * @author 暮光:城中城 * @since 2018年8月21日 - * @param docUrl - * @return + * @param docUrl 文档地址 + * @return 删除结果 */ @PostMapping(value = "/deleteSwaggerDoc") - public ResponseJson deleteSwaggerDoc(String docUrl) { - if (storageService == null) { - return MgUiResponseJson.warn(Toast.AUTOWIRED_ERROR); - } + public ResponseJson deleteSwaggerDoc(String docUrl) { String swaggerDocsDeleteStr = storageService.get(StorageKeys.SWAGGER_DOCS_DELETE_LIST); Set swaggerDocsDeleteSet = new HashSet<>(); if (StringUtils.isNotBlank(swaggerDocsDeleteStr)) { @@ -278,6 +281,6 @@ public class MgDocumentController { } swaggerDocsDeleteSet.add(docUrl); storageService.put(StorageKeys.SWAGGER_DOCS_DELETE_LIST, JSON.toJSONString(swaggerDocsDeleteSet)); - return MgUiResponseJson.ok(); + return DocResponseJson.ok(); } } diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgHttpRequestController.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgHttpRequestController.java new file mode 100644 index 00000000..00a5e72e --- /dev/null +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgHttpRequestController.java @@ -0,0 +1,60 @@ +package com.zyplayer.doc.swagger.controller; + +import java.net.HttpCookie; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.zyplayer.doc.core.json.DocResponseJson; +import com.zyplayer.doc.swagger.controller.param.HttpRequestParam; +import com.zyplayer.doc.swagger.controller.vo.HttpCookieVo; +import com.zyplayer.doc.swagger.controller.vo.HttpHeaderVo; +import com.zyplayer.doc.swagger.controller.vo.HttpRequestVo; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; + +/** + * 后台代理网络请求的控制器 + * + * @author 暮光:城中城 + * @since 2018年8月21日 + */ +@RestController +@RequestMapping("/swagger-mg-ui/http") +public class MgHttpRequestController { + + @PostMapping(value = "/request") + public DocResponseJson post(HttpRequestParam param) { + HttpRequest request = param.createRequest(); + HttpResponse response = request.execute(); + HttpRequestVo httpRequestVo = new HttpRequestVo(); + httpRequestVo.setData(response.body()); + httpRequestVo.setStatus(response.getStatus()); + List cookies = response.getCookies(); + if (cookies != null && cookies.size() > 0) { + List cookie = cookies.stream().map(val -> { + return new HttpCookieVo(val.getName(), val.getValue()); + }).collect(Collectors.toList()); + httpRequestVo.setCookie(cookie); + } + Map> headers = response.headers(); + if (headers != null && headers.size() > 0) { + List header = new ArrayList<>(headers.size()); + for (Entry> httpHeader : headers.entrySet()) { + HttpHeaderVo vo = new HttpHeaderVo(); + vo.setName(httpHeader.getKey()); + vo.setValue(String.join(";", httpHeader.getValue())); + header.add(vo); + } + httpRequestVo.setHeader(header); + } + return DocResponseJson.ok(httpRequestVo); + } +} diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgStorageController.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgStorageController.java new file mode 100644 index 00000000..cf2e4e75 --- /dev/null +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/MgStorageController.java @@ -0,0 +1,66 @@ +package com.zyplayer.doc.swagger.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.zyplayer.doc.core.json.DocResponseJson; +import com.zyplayer.doc.swagger.framework.service.MgStorage; +import com.zyplayer.doc.swagger.framework.service.MgStorageService; + +/** + * 后台存储服务控制器 + * + * @author 暮光:城中城 + * @since 2018年8月21日 + */ +@RestController +@RequestMapping("/swagger-mg-ui/storage") +public class MgStorageController { + + @Autowired + private MgStorageService storageService; + + @PostMapping(value = "/checkConfig") + public DocResponseJson checkConfig() { + return DocResponseJson.ok(); + } + + @PostMapping(value = "/data") + public DocResponseJson setData(String key, String value) { + if (key == null || value == null) { + return DocResponseJson.warn("参数名或值不能为空"); + } + storageService.put(key, value); + return DocResponseJson.ok(); + } + + @GetMapping(value = "/data") + public DocResponseJson getData(String key) { + if (key == null) { + return DocResponseJson.warn("参数名不能为空"); + } + String value = storageService.get(key); + value = (value == null) ? "" : value; + return DocResponseJson.ok(value); + } + + @PostMapping(value = "/delete") + public DocResponseJson delete(String key) { + if (key == null) { + return DocResponseJson.warn("参数名不能为空"); + } + storageService.remove(key); + return DocResponseJson.ok(); + } + + @PostMapping(value = "/like") + public DocResponseJson like(String key, String value) { + List likeList = storageService.like(key, value); + return DocResponseJson.ok(likeList); + } +} \ No newline at end of file diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/param/HttpRequestParam.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/param/HttpRequestParam.java similarity index 89% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/param/HttpRequestParam.java rename to zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/param/HttpRequestParam.java index 1930221c..1337af41 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/param/HttpRequestParam.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/param/HttpRequestParam.java @@ -1,4 +1,4 @@ -package com.mg.swagger.controller.param; +package com.zyplayer.doc.swagger.controller.param; import java.util.HashMap; import java.util.Map; @@ -92,6 +92,7 @@ public class HttpRequestParam { /** * 组装请求 + * @return HttpRequest */ public HttpRequest createRequest() { if("get".equalsIgnoreCase(this.method)) return get(); @@ -107,6 +108,7 @@ public class HttpRequestParam { /** * POST请求 + * @return HttpRequest */ public HttpRequest post() { HttpRequest request = HttpRequest.post(this.getUrl()); @@ -116,6 +118,7 @@ public class HttpRequestParam { /** * GET请求 + * @return HttpRequest */ public HttpRequest get() { HttpRequest request = HttpRequest.get(this.getUrl()); @@ -125,6 +128,7 @@ public class HttpRequestParam { /** * HEAD请求 + * @return HttpRequest */ public HttpRequest head() { HttpRequest request = HttpRequest.head(this.getUrl()); @@ -134,6 +138,7 @@ public class HttpRequestParam { /** * OPTIONS请求 + * @return HttpRequest */ public HttpRequest options() { HttpRequest request = HttpRequest.options(this.getUrl()); @@ -143,6 +148,7 @@ public class HttpRequestParam { /** * PUT请求 + * @return HttpRequest */ public HttpRequest put() { HttpRequest request = HttpRequest.put(this.getUrl()); @@ -152,6 +158,7 @@ public class HttpRequestParam { /** * PATCH请求 + * @return HttpRequest */ public HttpRequest patch() { HttpRequest request = HttpRequest.patch(this.getUrl()); @@ -161,6 +168,7 @@ public class HttpRequestParam { /** * DELETE请求 + * @return HttpRequest */ public HttpRequest delete() { HttpRequest request = HttpRequest.delete(this.getUrl()); @@ -170,6 +178,7 @@ public class HttpRequestParam { /** * TRACE请求 + * @return HttpRequest */ public HttpRequest trace() { HttpRequest request = HttpRequest.trace(this.getUrl()); diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/vo/HttpCookieVo.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/HttpCookieVo.java similarity index 64% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/vo/HttpCookieVo.java rename to zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/HttpCookieVo.java index 5173a110..d0f532c6 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/vo/HttpCookieVo.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/HttpCookieVo.java @@ -1,7 +1,8 @@ -package com.mg.swagger.controller.vo; +package com.zyplayer.doc.swagger.controller.vo; /** * cookie返回值对象 + * * @author 暮光:城中城 * @since 2018年8月21日 */ @@ -9,6 +10,15 @@ public class HttpCookieVo { private String name; private String value; + public HttpCookieVo() { + + } + + public HttpCookieVo(String name, String value) { + this.name = name; + this.value = value; + } + public String getName() { return name; } diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/vo/HttpHeaderVo.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/HttpHeaderVo.java similarity index 83% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/vo/HttpHeaderVo.java rename to zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/HttpHeaderVo.java index c9a4033f..5cea8b58 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/controller/vo/HttpHeaderVo.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/HttpHeaderVo.java @@ -1,4 +1,4 @@ -package com.mg.swagger.controller.vo; +package com.zyplayer.doc.swagger.controller.vo; /** * header返回值对象 diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/HttpRequestVo.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/HttpRequestVo.java new file mode 100644 index 00000000..4cd11172 --- /dev/null +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/HttpRequestVo.java @@ -0,0 +1,55 @@ +package com.zyplayer.doc.swagger.controller.vo; + +import java.util.List; + +import io.swagger.annotations.ApiModelProperty; + +/** + * request返回值对象 + * + * @author 暮光:城中城 + * @since 2018年8月21日 + */ +public class HttpRequestVo { + @ApiModelProperty(value = "代理请求返回的cookie") + private List cookie; + @ApiModelProperty(value = "代理请求返回的header") + private List header; + @ApiModelProperty(value = "代理请求返回的status") + private Integer status; + @ApiModelProperty(value = "返回数据") + private Object data; + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + public List getCookie() { + return cookie; + } + + public void setCookie(List cookie) { + this.cookie = cookie; + } + + public List getHeader() { + return header; + } + + public void setHeader(List header) { + this.header = header; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + +} diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/SwaggerLocationVo.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/SwaggerLocationVo.java new file mode 100644 index 00000000..d5244444 --- /dev/null +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/controller/vo/SwaggerLocationVo.java @@ -0,0 +1,69 @@ +package com.zyplayer.doc.swagger.controller.vo; + +public class SwaggerLocationVo { + private String swagger; + private String info; + private String host; + private String paths; + private String definitions; + + private String tags; + private String basePath; + + public String getSwagger() { + return swagger; + } + + public void setSwagger(String swagger) { + this.swagger = swagger; + } + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getPaths() { + return paths; + } + + public void setPaths(String paths) { + this.paths = paths; + } + + public String getDefinitions() { + return definitions; + } + + public void setDefinitions(String definitions) { + this.definitions = definitions; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getBasePath() { + return basePath; + } + + public void setBasePath(String basePath) { + this.basePath = basePath; + } + +} diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/configuration/EnableSwaggerMgUi.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/configuration/EnableSwaggerMgUi.java similarity index 70% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/configuration/EnableSwaggerMgUi.java rename to zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/configuration/EnableSwaggerMgUi.java index 277d4803..4b2563bb 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/configuration/EnableSwaggerMgUi.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/configuration/EnableSwaggerMgUi.java @@ -1,4 +1,4 @@ -package com.mg.swagger.framework.configuration; +package com.zyplayer.doc.swagger.framework.configuration; import java.lang.annotation.Documented; import java.lang.annotation.Retention; @@ -6,23 +6,21 @@ import java.lang.annotation.Target; import org.springframework.context.annotation.Import; -import com.mg.swagger.framework.filter.MgUiTestFilter; - @Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) @Target(value = { java.lang.annotation.ElementType.TYPE }) @Documented -@Import({ SwaggerCommonConfiguration.class, MgUiTestFilter.class, SpringContextUtil.class }) +@Import({ SwaggerCommonConfiguration.class, SpringContextUtil.class }) public @interface EnableSwaggerMgUi { /** * 是否自动把自身的swagger-resources加进来 - * @return + * @return 配置 */ boolean selfDoc() default true; /** * 启动后第一次访问没有数据情况下需要加载进来的swagger-resources地址 - * @return + * @return swagger-resources地址 */ String[] defaultResources() default {}; } diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/configuration/SpringContextUtil.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/configuration/SpringContextUtil.java similarity index 88% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/configuration/SpringContextUtil.java rename to zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/configuration/SpringContextUtil.java index 73fa8b49..00405eae 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/configuration/SpringContextUtil.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/configuration/SpringContextUtil.java @@ -1,4 +1,4 @@ -package com.mg.swagger.framework.configuration; +package com.zyplayer.doc.swagger.framework.configuration; import java.lang.annotation.Annotation; import java.util.Map; @@ -35,8 +35,8 @@ public class SpringContextUtil implements ApplicationContextAware { /** * 获取类 - * @param cacheName - * @return + * @param annotationType annotation + * @return 类对象 */ public static Object getBeanWithAnnotation(Class annotationType) { if (context == null) { diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/configuration/SwaggerCommonConfiguration.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/configuration/SwaggerCommonConfiguration.java new file mode 100644 index 00000000..0817e4ae --- /dev/null +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/configuration/SwaggerCommonConfiguration.java @@ -0,0 +1,25 @@ +package com.zyplayer.doc.swagger.framework.configuration; + +import org.springframework.context.annotation.ComponentScan; + +//@EnableAutoConfiguration +@ComponentScan(basePackages = { + "com.zyplayer.doc.swagger.controller", + "com.zyplayer.doc.swagger.framework.service", +}) +public class SwaggerCommonConfiguration { + +// 不再默认开启拦截 +// @Autowired +// private MgUiTestFilter mgUiTestFilter; +// +// @Bean +// public FilterRegistrationBean mockTestFilter() { +// FilterRegistrationBean registration = new FilterRegistrationBean(); +// registration.setFilter(mgUiTestFilter); +// registration.addUrlPatterns("/*"); +// registration.setName("mgUiTestFilter"); +// registration.setOrder(2); +// return registration; +// } +} diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/constant/StorageKeys.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/StorageKeys.java similarity index 65% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/constant/StorageKeys.java rename to zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/StorageKeys.java index 307f56cb..db913b51 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/constant/StorageKeys.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/StorageKeys.java @@ -1,4 +1,4 @@ -package com.mg.swagger.framework.constant; +package com.zyplayer.doc.swagger.framework.constant; /** * 存储数据的KEY常量类 @@ -11,4 +11,6 @@ public class StorageKeys { public static final String SWAGGER_RESOURCES_LIST = "swagger-resources-list"; // 已删除的文档 public static final String SWAGGER_DOCS_DELETE_LIST = "swagger-docs-delete-list"; + // 所有详细文档地址 + public static final String SWAGGER_LOCATION_LIST = "swagger-location-list"; } \ No newline at end of file diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/constant/Toast.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/Toast.java similarity index 76% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/constant/Toast.java rename to zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/Toast.java index eb3616f5..c0065319 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/constant/Toast.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/constant/Toast.java @@ -1,4 +1,4 @@ -package com.mg.swagger.framework.constant; +package com.zyplayer.doc.swagger.framework.constant; /** * 提示语常量类 diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/filter/MgUiTestFilter.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/filter/MgUiTestFilter.java similarity index 90% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/filter/MgUiTestFilter.java rename to zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/filter/MgUiTestFilter.java index 1865c9f7..6bb26183 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/filter/MgUiTestFilter.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/filter/MgUiTestFilter.java @@ -1,4 +1,4 @@ -package com.mg.swagger.framework.filter; +package com.zyplayer.doc.swagger.framework.filter; import java.io.IOException; @@ -12,11 +12,11 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import com.mg.swagger.framework.service.MgStorageService; +import com.zyplayer.doc.swagger.framework.service.MgStorageService; /** + * 有需要此拦截器的请自行拷贝至自身项目,不再开启@Component
* 判断是否是模拟请求,功能需求:
* 很多时候后端定义好了接口,但还未实现,这时前端已经需要数据调试了,这时就需要用到这个过滤器了!
* 在页面上先配置好模拟返回的数据,然后在url上加入参数:mgUiTestFlag=1
@@ -27,7 +27,7 @@ import com.mg.swagger.framework.service.MgStorageService; * 也许需要10天才能写完,但前端两天就写好了,急需数据看效果,这时就让他们自己去设置模拟值,加上参数自己测试好。 * 而不是一味的催后台,把各种锅丢给后端,然后玩自己的去了,浪费各环节等待时间。 */ -@Component +//@Component public class MgUiTestFilter implements Filter { @Autowired(required = false) diff --git a/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/service/MgStorage.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/service/MgStorage.java new file mode 100644 index 00000000..bc85447b --- /dev/null +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/service/MgStorage.java @@ -0,0 +1,47 @@ +package com.zyplayer.doc.swagger.framework.service; + +import java.io.Serializable; + +/** + * 数据类型 + * @author 暮光:城中城 + * @since 2018-11-27 + */ +public class MgStorage implements Serializable { + + private static final long serialVersionUID = 1L; + + private String key; + + private String value; + + public MgStorage() { + + } + + public MgStorage(String key, String value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public static long getSerialversionuid() { + return serialVersionUID; + } + +} diff --git a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/service/MgStorageService.java b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/service/MgStorageService.java similarity index 54% rename from zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/service/MgStorageService.java rename to zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/service/MgStorageService.java index 9ac3a5f0..c389cb09 100644 --- a/zyplayer-doc-swagger/src/main/java/com/mg/swagger/framework/service/MgStorageService.java +++ b/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/service/MgStorageService.java @@ -1,4 +1,6 @@ -package com.mg.swagger.framework.service; +package com.zyplayer.doc.swagger.framework.service; + +import java.util.List; /** * 实现此类才能使用服务器端的存贮功能 @@ -11,17 +13,27 @@ public interface MgStorageService { * 获取存储的值 * @author 暮光:城中城 * @since 2018年8月19日 - * @param key - * @return + * @param key 参数 + * @return 值 */ String get(String key); + /** + * 模糊获取存储的值 + * @author 暮光:城中城 + * @since 2018年8月19日 + * @param key 参数 + * @param value 值 + * @return 值 + */ + List like(String key, String value); + /** * 存储数据 * @author 暮光:城中城 * @since 2018年8月19日 - * @param key - * @param value + * @param key 参数 + * @param value 值 */ void put(String key, String value); @@ -29,7 +41,7 @@ public interface MgStorageService { * 删除数据 * @author 暮光:城中城 * @since 2018年8月19日 - * @param key + * @param key 参数 */ void remove(String key); diff --git a/zyplayer-doc-swagger/src/main/resources/document.html b/zyplayer-doc-swagger/src/main/resources/document.html index 4a4450a9..80b03e89 100644 --- a/zyplayer-doc-swagger/src/main/resources/document.html +++ b/zyplayer-doc-swagger/src/main/resources/document.html @@ -3,7 +3,7 @@ - swagger-mg-ui + 接口文档管理系统 - zyplayer @@ -12,12 +12,12 @@
- +
-
    +
      @@ -104,11 +113,11 @@
      简介
      - swagger-mg-ui是swagger-ui的一个前端实现,使用简单、解析速度快、走心的设计, + zyplayer-doc-swagger是swagger-ui的一个前端实现,使用简单、解析速度快、走心的设计, 支持多项目同时展示,多种文档目录的展示方案,多种自定义配置,满足各种使用习惯。 本项目是完全从头写的,所以有任何属性未解析到、UI上有何建议都能及时处理得到。 使用中您有任何的意见和建议都可到源码地址处反馈哦!
      - 源码地址:swagger-mg-ui, + 源码地址:zyplayer-doc-swagger, 前端框架:zui, 我的网站:空间轴 @@ -369,7 +378,7 @@ 测试地址 -   +   返回内容 @@ -417,7 +426,7 @@