Commit efbc3a31c07e87f4d74b1fbbc28c3ab16aaa650a

Authored by 648540858
1 parent 5fab97cf

支持登录返回值中携带token

README.md
@@ -99,15 +99,16 @@ https://gitee.com/pan648540858/wvp-GB28181-pro.git @@ -99,15 +99,16 @@ https://gitee.com/pan648540858/wvp-GB28181-pro.git
99 - [X] 支持接口鉴权 99 - [X] 支持接口鉴权
100 - [X] 云端录像,推流/代理/国标视频均可以录制在云端服务器,支持预览和下载 100 - [X] 云端录像,推流/代理/国标视频均可以录制在云端服务器,支持预览和下载
101 - [X] 支持打包可执行jar和war 101 - [X] 支持打包可执行jar和war
  102 +- [X] 支持跨域请求,支持前后端分离部署
102 103
103 104
104 # 遇到问题如何解决 105 # 遇到问题如何解决
105 国标最麻烦的地方在于设备的兼容性,所以需要大量的设备来测试,目前作者手里的设备有限,再加上作者水平有限,所以遇到问题在所难免; 106 国标最麻烦的地方在于设备的兼容性,所以需要大量的设备来测试,目前作者手里的设备有限,再加上作者水平有限,所以遇到问题在所难免;
106 -1. 查看wiki,仔细的阅读可以帮你避免几乎所有的问题 107 +1. 查看文档网站,仔细的阅读可以帮你避免几乎所有的问题
107 2. 搜索issues,这里有大部分的答案 108 2. 搜索issues,这里有大部分的答案
108 3. 加QQ群(901799015),这里有大量热心的小伙伴,但是前提新希望你已经仔细阅读了wiki和搜索了issues。 109 3. 加QQ群(901799015),这里有大量热心的小伙伴,但是前提新希望你已经仔细阅读了wiki和搜索了issues。
109 4. 你可以请作者为你解答,但是我不是免费的。 110 4. 你可以请作者为你解答,但是我不是免费的。
110 -5. 你可以把遇到问题的设备寄给我,可以更容易的复现问题。 111 +5. 你可以把遇到问题的设备寄给我,可以更容易的兼容设备和解决问题。
111 112
112 # 使用帮助 113 # 使用帮助
113 QQ群: 901799015, ZLM使用文档[https://github.com/ZLMediaKit/ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit) 114 QQ群: 901799015, ZLM使用文档[https://github.com/ZLMediaKit/ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit)
doc/_content/introduction/deployment.md
@@ -21,19 +21,34 @@ @@ -21,19 +21,34 @@
21 4. WVP-PRO与ZLM支持分开部署,但是wvp-pro-assist必须与zlm部署在同一台主机; 21 4. WVP-PRO与ZLM支持分开部署,但是wvp-pro-assist必须与zlm部署在同一台主机;
22 5. 生产环境按需开放端口,但是建议修改默认端口,尤其是5060端口,易受到攻击; 22 5. 生产环境按需开放端口,但是建议修改默认端口,尤其是5060端口,易受到攻击;
23 6. zlm使用docker部署的情况,要求端口映射一致,比如映射5060,应将外部端口也映射为5060端口; 23 6. zlm使用docker部署的情况,要求端口映射一致,比如映射5060,应将外部端口也映射为5060端口;
24 -7. 启动服务,以linux为例  
25 -**启动WVP-PRO**  
26 -jar包: 24 +7. 启动服务,以linux为例
  25 +### 启动WVP-PRO
  26 +**jar包:**
27 ```shell 27 ```shell
28 nohup java -jar wvp-pro-*.jar & 28 nohup java -jar wvp-pro-*.jar &
29 ``` 29 ```
30 -war包: 30 +**war包:**
31 下载Tomcat后将war包放入webapps中,启动Tomcat以解压war包,停止Tomcat后,删除ROOT目录以及war包,将解压后的war包目录重命名为ROOT,将配置文件中的Server.port配置为与Tomcat端口一致 31 下载Tomcat后将war包放入webapps中,启动Tomcat以解压war包,停止Tomcat后,删除ROOT目录以及war包,将解压后的war包目录重命名为ROOT,将配置文件中的Server.port配置为与Tomcat端口一致
32 然后启动Tomcat。 32 然后启动Tomcat。
33 **启动ZLM** 33 **启动ZLM**
34 ```shell 34 ```shell
35 nohup ./MediaServer -d -m 3 & 35 nohup ./MediaServer -d -m 3 &
36 ``` 36 ```
  37 +### 前后端分离部署
  38 +前后端部署目前在最新的版本已经支持,请使用3月15日之后的版本部署
  39 +前端编译后的文件在`src/main/resources/static`中,将此目录下的文件部署。
  40 +前后端分离部署最大的问题是跨域的解决,之前版本使用cookie完成登录流程,而cookie是不可以在复杂跨域中使用的。所以当前版本使用JWT生成的TOKEN作为认证凭据,
  41 +部署前端后需要在wvp中配置前端访问的地址以完成跨域流程。
  42 +加入你的服务有公网域名为xxx.com,公网IP为11.11.11.11, 那么你可以在wvp中这样配置:
  43 +```yaml
  44 +user-settings:
  45 + # 跨域配置,配置你访问前端页面的地址即可, 可以配置多个
  46 + allowed-origins:
  47 + - http://xxx.com:8008
  48 + - http://11.11.11.11:8008
  49 +```
  50 +配置不是必须的,你使用哪个ip/域名访问就配置哪个即可。修改配置后重启wvp以使配置生效。
  51 +
37 52
38 [接入设备](./_content/ability/device.md) 53 [接入设备](./_content/ability/device.md)
39 54
src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java
@@ -22,7 +22,6 @@ public class AnonymousAuthenticationEntryPoint implements AuthenticationEntry @@ -22,7 +22,6 @@ public class AnonymousAuthenticationEntryPoint implements AuthenticationEntry
22 22
23 @Override 23 @Override
24 public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) { 24 public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) {
25 - System.err.println(e.getMessage());  
26 String jwt = request.getHeader(JwtUtils.getHeader()); 25 String jwt = request.getHeader(JwtUtils.getHeader());
27 JwtUser jwtUser = JwtUtils.verifyToken(jwt); 26 JwtUser jwtUser = JwtUtils.verifyToken(jwt);
28 String username = jwtUser.getUserName(); 27 String username = jwtUser.getUserName();
src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java
@@ -19,6 +19,8 @@ public class LoginUser implements UserDetails, CredentialsContainer { @@ -19,6 +19,8 @@ public class LoginUser implements UserDetails, CredentialsContainer {
19 */ 19 */
20 private User user; 20 private User user;
21 21
  22 + private String accessToken;
  23 +
22 24
23 /** 25 /**
24 * 登录时间 26 * 登录时间
@@ -99,4 +101,11 @@ public class LoginUser implements UserDetails, CredentialsContainer { @@ -99,4 +101,11 @@ public class LoginUser implements UserDetails, CredentialsContainer {
99 } 101 }
100 102
101 103
  104 + public String getAccessToken() {
  105 + return accessToken;
  106 + }
  107 +
  108 + public void setAccessToken(String accessToken) {
  109 + this.accessToken = accessToken;
  110 + }
102 } 111 }
src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
@@ -42,7 +42,9 @@ public class UserController { @@ -42,7 +42,9 @@ public class UserController {
42 42
43 @GetMapping("/login") 43 @GetMapping("/login")
44 @PostMapping("/login") 44 @PostMapping("/login")
45 - @Operation(summary = "登录") 45 + @Operation(summary = "登录", description = "登录成功后返回AccessToken, 可以从返回值获取到也可以从响应头中获取到," +
  46 + "后续的请求需要添加请求头 'access-token'或者放在参数里")
  47 +
46 @Parameter(name = "username", description = "用户名", required = true) 48 @Parameter(name = "username", description = "用户名", required = true)
47 @Parameter(name = "password", description = "密码(32位md5加密)", required = true) 49 @Parameter(name = "password", description = "密码(32位md5加密)", required = true)
48 public LoginUser login(HttpServletRequest request, HttpServletResponse response, @RequestParam String username, @RequestParam String password){ 50 public LoginUser login(HttpServletRequest request, HttpServletResponse response, @RequestParam String username, @RequestParam String password){
@@ -57,28 +59,11 @@ public class UserController { @@ -57,28 +59,11 @@ public class UserController {
57 }else { 59 }else {
58 String jwt = JwtUtils.createToken(username, password); 60 String jwt = JwtUtils.createToken(username, password);
59 response.setHeader(JwtUtils.getHeader(), jwt); 61 response.setHeader(JwtUtils.getHeader(), jwt);
  62 + user.setAccessToken(jwt);
60 } 63 }
61 return user; 64 return user;
62 } 65 }
63 66
64 -// @GetMapping("/logout")  
65 -// @PostMapping("/logout")  
66 -// @Operation(summary = "登出")  
67 -// public LoginUser logout(){  
68 -// LoginUser user;  
69 -// try {  
70 -// user = SecurityUtils.login(username, password, authenticationManager);  
71 -// } catch (AuthenticationException e) {  
72 -// throw new ControllerException(ErrorCode.ERROR100.getCode(), e.getMessage());  
73 -// }  
74 -// if (user == null) {  
75 -// throw new ControllerException(ErrorCode.ERROR100.getCode(), "用户名或密码错误");  
76 -// }else {  
77 -// String jwt = JwtUtils.createToken(username, password);  
78 -// response.setHeader(JwtUtils.getHeader(), jwt);  
79 -// }  
80 -// return user;  
81 -// }  
82 67
83 @PostMapping("/changePassword") 68 @PostMapping("/changePassword")
84 @Operation(summary = "修改密码") 69 @Operation(summary = "修改密码")