Commit efbc3a31c07e87f4d74b1fbbc28c3ab16aaa650a
1 parent
5fab97cf
支持登录返回值中携带token
Showing
5 changed files
with
35 additions
and
26 deletions
README.md
| ... | ... | @@ -99,15 +99,16 @@ https://gitee.com/pan648540858/wvp-GB28181-pro.git |
| 99 | 99 | - [X] 支持接口鉴权 |
| 100 | 100 | - [X] 云端录像,推流/代理/国标视频均可以录制在云端服务器,支持预览和下载 |
| 101 | 101 | - [X] 支持打包可执行jar和war |
| 102 | +- [X] 支持跨域请求,支持前后端分离部署 | |
| 102 | 103 | |
| 103 | 104 | |
| 104 | 105 | # 遇到问题如何解决 |
| 105 | 106 | 国标最麻烦的地方在于设备的兼容性,所以需要大量的设备来测试,目前作者手里的设备有限,再加上作者水平有限,所以遇到问题在所难免; |
| 106 | -1. 查看wiki,仔细的阅读可以帮你避免几乎所有的问题 | |
| 107 | +1. 查看文档网站,仔细的阅读可以帮你避免几乎所有的问题 | |
| 107 | 108 | 2. 搜索issues,这里有大部分的答案 |
| 108 | 109 | 3. 加QQ群(901799015),这里有大量热心的小伙伴,但是前提新希望你已经仔细阅读了wiki和搜索了issues。 |
| 109 | 110 | 4. 你可以请作者为你解答,但是我不是免费的。 |
| 110 | -5. 你可以把遇到问题的设备寄给我,可以更容易的复现问题。 | |
| 111 | +5. 你可以把遇到问题的设备寄给我,可以更容易的兼容设备和解决问题。 | |
| 111 | 112 | |
| 112 | 113 | # 使用帮助 |
| 113 | 114 | QQ群: 901799015, ZLM使用文档[https://github.com/ZLMediaKit/ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit) | ... | ... |
doc/_content/introduction/deployment.md
| ... | ... | @@ -21,19 +21,34 @@ |
| 21 | 21 | 4. WVP-PRO与ZLM支持分开部署,但是wvp-pro-assist必须与zlm部署在同一台主机; |
| 22 | 22 | 5. 生产环境按需开放端口,但是建议修改默认端口,尤其是5060端口,易受到攻击; |
| 23 | 23 | 6. zlm使用docker部署的情况,要求端口映射一致,比如映射5060,应将外部端口也映射为5060端口; |
| 24 | -7. 启动服务,以linux为例 | |
| 25 | -**启动WVP-PRO** | |
| 26 | -jar包: | |
| 24 | +7. 启动服务,以linux为例 | |
| 25 | +### 启动WVP-PRO | |
| 26 | +**jar包:** | |
| 27 | 27 | ```shell |
| 28 | 28 | nohup java -jar wvp-pro-*.jar & |
| 29 | 29 | ``` |
| 30 | -war包: | |
| 30 | +**war包:** | |
| 31 | 31 | 下载Tomcat后将war包放入webapps中,启动Tomcat以解压war包,停止Tomcat后,删除ROOT目录以及war包,将解压后的war包目录重命名为ROOT,将配置文件中的Server.port配置为与Tomcat端口一致 |
| 32 | 32 | 然后启动Tomcat。 |
| 33 | 33 | **启动ZLM** |
| 34 | 34 | ```shell |
| 35 | 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 | 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 | 22 | |
| 23 | 23 | @Override |
| 24 | 24 | public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) { |
| 25 | - System.err.println(e.getMessage()); | |
| 26 | 25 | String jwt = request.getHeader(JwtUtils.getHeader()); |
| 27 | 26 | JwtUser jwtUser = JwtUtils.verifyToken(jwt); |
| 28 | 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 | 19 | */ |
| 20 | 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 | 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 | 42 | |
| 43 | 43 | @GetMapping("/login") |
| 44 | 44 | @PostMapping("/login") |
| 45 | - @Operation(summary = "登录") | |
| 45 | + @Operation(summary = "登录", description = "登录成功后返回AccessToken, 可以从返回值获取到也可以从响应头中获取到," + | |
| 46 | + "后续的请求需要添加请求头 'access-token'或者放在参数里") | |
| 47 | + | |
| 46 | 48 | @Parameter(name = "username", description = "用户名", required = true) |
| 47 | 49 | @Parameter(name = "password", description = "密码(32位md5加密)", required = true) |
| 48 | 50 | public LoginUser login(HttpServletRequest request, HttpServletResponse response, @RequestParam String username, @RequestParam String password){ |
| ... | ... | @@ -57,28 +59,11 @@ public class UserController { |
| 57 | 59 | }else { |
| 58 | 60 | String jwt = JwtUtils.createToken(username, password); |
| 59 | 61 | response.setHeader(JwtUtils.getHeader(), jwt); |
| 62 | + user.setAccessToken(jwt); | |
| 60 | 63 | } |
| 61 | 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 | 68 | @PostMapping("/changePassword") |
| 84 | 69 | @Operation(summary = "修改密码") | ... | ... |