SpringBoot实现Vue-admin-template登录
SpringBoot 实现 vue-admin-template 登录接口#
vue-admin-template#
vue-admin-template 是一个简化版的 vue-element-admin 的模板,
适合 vue 用来做项目的搭建,虽然官方文档以及花裤衩前端大佬
在博客中已经将大部分的疑难杂症解决了,但当完全自己搭建的
时候才发现多折腾
vue-admin-template 登录接口请求详解#
要想搞懂一个接口,最好的方式就是
1. 去看接口的定义声明的参数
2. 发送请求查看返回的数据格式
1. 在 Github 拉项目下来运行,Chrome 开发者模式调试登录接口
2. 查看 login 请求传参和返回的参数
从上往下看的分别是请求头,响应的数据格式,请求的参数
提取重点信息:POST 请求,URL 地址
3. 查看 info 请求传参和返回的参数
从上往下看分别是请求头和响应的数据格式
提取重点信息:GET 请求,URL 地址,URL 地址中传递参数
vue-admin-template 登录接口代码详解#
找到 login.vue 文件,在点击登录按钮后会触发处理登录的函数
如果通过 element ui 的表单校验则会进入红色方框的代码块
this.$store.dispatch('user/login', this.loginForm)
这里的代码是 Vuex 的状态管理模式方法调用,转发到 user 的 login 方法下
login 请求详解#
在 store 文件夹可以找到 user.js 文件,在里面声明的 actions 中可以找到具体的方法
这里有两个 login 方法,第一个方法是 user.js 中声明的,第二个方法可以在顶部看到是 src 目录下的 api 文件夹中的 user.js 引入进来的
进入到第二个 login 方法会发现它其实就是封装 axios 进行异步请求
你可以找到顶部 request.js 点进去看到,你就发现它引入 axios
图中的 baseURL 先圈起来,后面会考(会用到)
看到这里也就不难明白转发 (dispatch) 的目的
1. 发送 login 请求获取到 token 值
2. 并存储到 Vuex 状态管理模式中,供多个组件同时识别使用
不懂 Vuex 状态,可以暂时肤浅的理解为全局的一个变量,能被子组件识别到
说完大概的发送请求,接下来就是看响应的数据格式,回到 login 的代码块中
可以看到请求后的数据用 response 接收,
这个 response 在这之前就已经经过 request.js 处理过再返回
途中的 res.code!==20000 就跟 login 返回的参数有一点眼熟,
这里应该是把 data.code 的值设置为 20000 才能不报错,
同时另外的一个 info 请求,还涉及到
data.code 不能设为 50000 ,500012 这些,不然也会报错
info 请求详解#
上面的 login 请求还有一点收尾没讲,就是要把获取到 token
存储 cookie 中,具体 setToken 的方法在 utils 文件夹下 auth.js
可以看到引入 js.cookies
接下来就是 info 的请求了,这个请求跟 login 请求类似,稍微提下的参数即可,
这里我没有找到它具体的调用的位置,但是这个请求是一定会发送的
它是用来获取用户的权限的信息,头像信息和名字等的个人信息的
在 login 获取并设置 token 后它去 store 中获取 token,放在 url 中请求接口,
接口需要返回头像(avatar),姓名(name),权限信息 (roles) 既可
通过校验其中权限是必须要有的,其他可以不返回
登录接口请求头详解#
在项目的根目录下有 vue.config.js
打开里面的这个文件,就可以看到 vue 前端的项目端口默认的端口 9528
如果在开发的环境中没有改变过端口就会默认使用这个端口
还有 before 属性是引入 mock.js 用前端产生假数据来进行前后交互
如果有后端的接口,就需要把这行注释掉
剩下的还有一个 dev-api 这个请求头信息,它其实在.env.development 文件中
里面有一个 VUE_APP_BASE_API 的基础 URL
我们要进行后端接口数据交互有时候需要改动这里
至此登录接口的详细解释就全部了解完了,下面就开始用自己简单写一个后端数据接口来进行交互,我这里用的是 SpringBoot 来进行数据交互
SpringBoot 整合 vue-admin-template 登录接口#
这里不会涉及到数据库的操作,只是在后端模拟生成
前端的 mock.js 里的数据,并按照对应的格式,能成功登录跳转即可,
如果再写数据库操作,博文就很长很臭,以后再另外开一篇
vue.config.js 文件改动#
1. 注释掉 mock.js 生成数据
2.open 属性改为 false,这里是为了编译启动项目时不要开两个网页
3. 如果改了 open 那么需要在 package.json 的启动命令中加上 --open(只在完成编译后才启动界面),其中 2 和 3 非必须
另外需要改动的就是接口的地址
main.js 注释掉 mock 生成数据
SpringBoot 中代码#
SpringBoot 中代码,只需要写一个 controller 既可以,其他默认自动生成结构如下
@Controller
public class LoginController {
@CrossOrigin
@PostMapping(value = "/vue-admin-template/user/login")
@ResponseBody
public Map login() {
HashMap<String, Object> response = new HashMap<>();
HashMap<String, Object> responseData = new HashMap<>();
responseData.put("token",1);
response.put("code",20000);
response.put("msg","登录成功");
response.put("data",responseData);
return response;
}
<span class="hljs-meta">@CrossOrigin</span>
<span class="hljs-meta">@GetMapping(value = "/vue-admin-template/user/info")</span>
<span class="hljs-meta">@ResponseBody</span>
<span class="hljs-keyword">public</span> Map <span class="hljs-title function_">info</span><span class="hljs-params">()</span> {
HashMap<String, Object> responseInfo = <span class="hljs-keyword">new</span> <span class="hljs-title class_">HashMap</span><>();
HashMap<String, Object> responseData = <span class="hljs-keyword">new</span> <span class="hljs-title class_">HashMap</span><>();
responseData.put(<span class="hljs-string">"roles"</span>,<span class="hljs-string">"admin"</span>);
responseData.put(<span class="hljs-string">"name"</span>,<span class="hljs-string">"Super admin"</span>);
responseData.put(<span class="hljs-string">"avatar"</span>,<span class="hljs-string">"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"</span>);
responseInfo.put(<span class="hljs-string">"code"</span>,<span class="hljs-number">20000</span>);
responseInfo.put(<span class="hljs-string">"msg"</span>,<span class="hljs-string">"登录成功"</span>);
responseInfo.put(<span class="hljs-string">"data"</span>,responseData);
<span class="hljs-keyword">return</span> responseInfo;
}
}
登录效果及请求和数据返回
请求头涉及到跨域访问前端时 8081 后端是 8080,采取代理模式
数据返回
文章配套的源码:#
链接: https://pan.baidu.com/s/1FRwVZpH1ye4zPEAll1ER4Q 提取码: ubif