接口开发
集成JWT token , 使用 swagger,进行接口管理和测试
1.传输格式
传输格式均为JSON字符串,并自动通过fasterxml jackson工具类(JsonMapper.java, AjaxJson, PrintJSON)进行对象到JSON转换。 输出格式符合JSON标准,UTF-8编码。
2.账号登录
http://localhost:8080/sys/login
POST参数:
参数名 | 是否必须 | 类型 | 说明 |
---|---|---|---|
userName | 是 | string | 用户名 |
password | 是 | string | 密 码 |
返回结果
登录成功
{
"msg": "操作成功",
"code": 200,
"success": true,
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1ODYyMzg3MDgsInVzZXJuYW1lIjoiYWRtaW4ifQ.NBa-phR20nknKWb5wJK63yuOVdxckUHZrSM6jedZYcg",
"refreshToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1ODY0MTE1MDgsInVzZXJuYW1lIjoiYWRtaW4ifQ.I7_x5Riky7OVBubkwt9XE5Q4jWN8RX7k8-k7Y-Uvbzw"
}
登录失败
{
"msg": "用户名或者密码错误!",
"code": 200,
"success": false
}
3.账号刷新
token失效之后,请勿直接调用#账号登录 api,应该先调用refreshToken接口刷新token,返回一个新的token。(为什么这么做呢?因为不同于session,token是无状态的,session是在用户一段时间不操作后才会超时失效。token不同,token自从它生成时,就指定了token的过期时间,即使用户一直在操作,到期token仍旧会失效。因此token失效时,用户有可能一直在操作,突然被中断操作弹出登录框,对用户来说体验极差。因此我们应该提供一个刷新token的方式,不应该告知一直在操作的用户,而是直接给该用户返回一个新的token。)
http://127.0.0.1:8080/sys/refreshToken
参数名 | 是否必须 | 类型 | 说明 |
---|---|---|---|
refreshToken | 是 | string | 刷新token用 |
刷新成功
{
"msg": "操作成功",
"code": 200,
"success": true,
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1ODYyMzkxMjUsInVzZXJuYW1lIjoiYWRtaW4ifQ.7JTw0aBLjHUADqJwDxMNYdAu8UD1LgEXk2bX2cESJFQ",
"refreshToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1ODY0MTE4OTgsInVzZXJuYW1lIjoiYWRtaW4ifQ.prnS-BuZHgxuzc10TDP-un2xSArz_USnyrnKYkG2x9I"
}
vue端刷新示例,请求api时返回401,说明access token失效需要刷新,
if (error.response.status === 401) { // 超时自动刷新
axios({
url: '/sys/refreshToken',
method: 'get',
params: { refreshToken: Vue.cookie.get('refreshToken') }
}).then(({ data }) => {
if (data && data.success) {
Vue.cookie.set('token', data.token)
Vue.cookie.set('refreshToken', data.refreshToken)
} else {
clearLoginInfo()
router.push({ name: 'login' })
}
})
刷新失败
返回402,说明refreshToken也已经过期,这时候就需要用户重新登录了。
4.账号退出
http://127.0.0.1:8080/sys/logout
5 请求数据
请求rest 接口,有2种,一种需要登录才能访问。
5.1登录访问
先调用登录接口,会获取token。 token支持三种方式传输。
- 在header中添加token
- 在cookie中添加token
- 在请求参数中附带token参数。 例如:http://127.0.0.1:8080/sys/user/getPermissions?token=xxxxxxx
5.2不登录访问
如果该接口不需要登录就可以访问: 在/jeeplus-web/src/main/java/com/jeeplus/config/shiro/ShiroConfig.java文件中去除权限过滤。 例如 : filterRuleMap.put("/401", "anon"); 切记,写在最前面,因为写在前面的规则优先级最高。如果你写在 filterRuleMap.put("/**", "jwt,kickout")后面,则该配置不生效,因为优先使用jwt规则进行拦截。