From efbc3a31c07e87f4d74b1fbbc28c3ab16aaa650a Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: Wed, 15 Mar 2023 22:56:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=99=BB=E5=BD=95=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=80=BC=E4=B8=AD=E6=90=BA=E5=B8=A6token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++-- doc/_content/introduction/deployment.md | 23 +++++++++++++++---- .../AnonymousAuthenticationEntryPoint.java | 1 - .../iot/vmp/conf/security/dto/LoginUser.java | 9 ++++++++ .../iot/vmp/vmanager/user/UserController.java | 23 ++++--------------- 5 files changed, 35 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index eb6859b2..bb816115 100644 --- a/README.md +++ b/README.md @@ -99,15 +99,16 @@ https://gitee.com/pan648540858/wvp-GB28181-pro.git - [X] 支持接口鉴权 - [X] 云端录像,推流/代理/国标视频均可以录制在云端服务器,支持预览和下载 - [X] 支持打包可执行jar和war +- [X] 支持跨域请求,支持前后端分离部署 # 遇到问题如何解决 国标最麻烦的地方在于设备的兼容性,所以需要大量的设备来测试,目前作者手里的设备有限,再加上作者水平有限,所以遇到问题在所难免; -1. 查看wiki,仔细的阅读可以帮你避免几乎所有的问题 +1. 查看文档网站,仔细的阅读可以帮你避免几乎所有的问题 2. 搜索issues,这里有大部分的答案 3. 加QQ群(901799015),这里有大量热心的小伙伴,但是前提新希望你已经仔细阅读了wiki和搜索了issues。 4. 你可以请作者为你解答,但是我不是免费的。 -5. 你可以把遇到问题的设备寄给我,可以更容易的复现问题。 +5. 你可以把遇到问题的设备寄给我,可以更容易的兼容设备和解决问题。 # 使用帮助 QQ群: 901799015, ZLM使用文档[https://github.com/ZLMediaKit/ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit) diff --git a/doc/_content/introduction/deployment.md b/doc/_content/introduction/deployment.md index 0ee803d8..804c9fc1 100644 --- a/doc/_content/introduction/deployment.md +++ b/doc/_content/introduction/deployment.md @@ -21,19 +21,34 @@ 4. WVP-PRO与ZLM支持分开部署,但是wvp-pro-assist必须与zlm部署在同一台主机; 5. 生产环境按需开放端口,但是建议修改默认端口,尤其是5060端口,易受到攻击; 6. zlm使用docker部署的情况,要求端口映射一致,比如映射5060,应将外部端口也映射为5060端口; -7. 启动服务,以linux为例 -**启动WVP-PRO** -jar包: +7. 启动服务,以linux为例 +### 启动WVP-PRO +**jar包:** ```shell nohup java -jar wvp-pro-*.jar & ``` -war包: +**war包:** 下载Tomcat后将war包放入webapps中,启动Tomcat以解压war包,停止Tomcat后,删除ROOT目录以及war包,将解压后的war包目录重命名为ROOT,将配置文件中的Server.port配置为与Tomcat端口一致 然后启动Tomcat。 **启动ZLM** ```shell nohup ./MediaServer -d -m 3 & ``` +### 前后端分离部署 +前后端部署目前在最新的版本已经支持,请使用3月15日之后的版本部署 +前端编译后的文件在`src/main/resources/static`中,将此目录下的文件部署。 +前后端分离部署最大的问题是跨域的解决,之前版本使用cookie完成登录流程,而cookie是不可以在复杂跨域中使用的。所以当前版本使用JWT生成的TOKEN作为认证凭据, +部署前端后需要在wvp中配置前端访问的地址以完成跨域流程。 +加入你的服务有公网域名为xxx.com,公网IP为11.11.11.11, 那么你可以在wvp中这样配置: +```yaml +user-settings: + # 跨域配置,配置你访问前端页面的地址即可, 可以配置多个 + allowed-origins: + - http://xxx.com:8008 + - http://11.11.11.11:8008 +``` +配置不是必须的,你使用哪个ip/域名访问就配置哪个即可。修改配置后重启wvp以使配置生效。 + [接入设备](./_content/ability/device.md) diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java b/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java index 3f70b794..7d617cc3 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java @@ -22,7 +22,6 @@ public class AnonymousAuthenticationEntryPoint implements AuthenticationEntry @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) { - System.err.println(e.getMessage()); String jwt = request.getHeader(JwtUtils.getHeader()); JwtUser jwtUser = JwtUtils.verifyToken(jwt); String username = jwtUser.getUserName(); diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java b/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java index 45e03bc7..61bd6fa6 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java @@ -19,6 +19,8 @@ public class LoginUser implements UserDetails, CredentialsContainer { */ private User user; + private String accessToken; + /** * 登录时间 @@ -99,4 +101,11 @@ public class LoginUser implements UserDetails, CredentialsContainer { } + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java index 035f3807..d23b03c4 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java @@ -42,7 +42,9 @@ public class UserController { @GetMapping("/login") @PostMapping("/login") - @Operation(summary = "登录") + @Operation(summary = "登录", description = "登录成功后返回AccessToken, 可以从返回值获取到也可以从响应头中获取到," + + "后续的请求需要添加请求头 'access-token'或者放在参数里") + @Parameter(name = "username", description = "用户名", required = true) @Parameter(name = "password", description = "密码(32位md5加密)", required = true) public LoginUser login(HttpServletRequest request, HttpServletResponse response, @RequestParam String username, @RequestParam String password){ @@ -57,28 +59,11 @@ public class UserController { }else { String jwt = JwtUtils.createToken(username, password); response.setHeader(JwtUtils.getHeader(), jwt); + user.setAccessToken(jwt); } return user; } -// @GetMapping("/logout") -// @PostMapping("/logout") -// @Operation(summary = "登出") -// public LoginUser logout(){ -// LoginUser user; -// try { -// user = SecurityUtils.login(username, password, authenticationManager); -// } catch (AuthenticationException e) { -// throw new ControllerException(ErrorCode.ERROR100.getCode(), e.getMessage()); -// } -// if (user == null) { -// throw new ControllerException(ErrorCode.ERROR100.getCode(), "用户名或密码错误"); -// }else { -// String jwt = JwtUtils.createToken(username, password); -// response.setHeader(JwtUtils.getHeader(), jwt); -// } -// return user; -// } @PostMapping("/changePassword") @Operation(summary = "修改密码")