接口开发

集成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规则进行拦截。