JeeSite 4.0 前后分离、接口调用、移动端API

阅读:662 2019-03-19 15:02:42 来源:新网

有不少朋友咨询我,想用jeesite做前后分开的应用,或者手机端api怎么调用?又或者只想用jeesite作为服务端api,仅提供服务接口怎么做?那这篇文章一定适合你,下面我来介绍下一些jeesite已内置的接口及如果自己来开发api接口提供服务。

内置接口系统登录

jeesite的系统默认登录,设置了des加密,如果不想加密,可将secretkey设置为空即可,或更改密钥,配置如下(jeesite.yml):

shiro:loginsubmit:#登录提交信息安全key,加密用户名、密码、验证码,后再提交(key设置为3个,用逗号分隔)secretkey:thinkgem,jeesite,com#设置为空,关闭登录des加密。#secretkey:~#如果是js请求可能会有跨域访问问题,可将如下参数设置为,允许的域名,全部域名设置*号,否则设置为空accesscontrolalloworigin:'*'

如果开启了加密,你就需要先将des加密工具引入:

js:

java:com.jeesite.common.codec.desutils

引入完成之后就可以通过如下方法进行调用加密了:

js:

java:

stringsecretkey=global.getconfig("shiro.loginsubmit.secretkey");stringusername=desutils.encode("system",secretkey);stringpassword=desutils.encode("admin",secretkey);system.out.println("&username="+username+"&password="+password);

以上两种语言,输出结果相同如下:

&username=f3edc7d2c193e0b8dcf554c726719ed2&password=235880c505accda5c581a4f4cdb81da0

下面我们就可以拿着这个用户名密码进行测试登录了。

通过js的ajax或者通过java的httpclient进行post或get请求如下地址,即可进行登录验证:

http://127.0.0.1:8980/js/a/login?__login=true&__ajax=json&username=f3edc7d2c193e0b8dcf554c726719ed2&password=235880c505accda5c581a4f4cdb81da0

你也可以添加登录附加参数如下:

1、可以指定登录设备类型(在线用户列表区分、登录验证码按设备区分,可根据设备指定session超时时间,默认pc):¶m_devicetype=mobileapp2、可以指定登录的系统(区分不同的菜单,默认default)¶m_syscode=mobileapp3、可以指定登录页面和主框架页的视图(默认:employee)¶m_usertype=member

若登录信息不正确,则返回如下失败json数据:

{"username":"f3edc7d2c193e110b8dcf554c726719ed2","rememberme":false,"rememberusercode":false,"params":"","shirologinfailure":"org.apache.shiro.authc.unknownaccountexception","message":"账号或密码错误,请重试.","isvalidcodelogin":false,"result":"false","sessionid":"2a6669501bf24afebcf4ff63eb048a56"}

如果失败,第二次登录,建议附加一个__sid参数,用来指明是同一个会话,如:

http://127.0.0.1:8980/js/a/login?__login=true&__ajax=json&username=f3edc7d2c193e0b8dcf554c726719ed2&password=235880c505accda5c581a4f4cdb81da0&__sid=2a6669501bf24afebcf4ff63eb048a56

注意:若参数配置的密码失败次数超过了预警值,则返回的结果信息中的isvalidcodelogin会变为true,这时你需要调用http://127.0.0.1:8980/js/validcode?__sid=2a6669501bf24afebcf4ff63eb048a56地址来获取验证码图片,另外请注意,移动端一般调用是无cookie的,建议加请求参数中要包含__sid参数,否则获取到的验证码值将无法与您登录请求会话匹配。

若登录信息正确,则返回如下登录成功json数据:

{"user":{"id":"system","status":"0","remarks":"","usercode":"system","logincode":"system","username":"超级管理员","usertype":"none","mgrtype":"0","lastloginip":"127.0.0.1","lastlogindate":"2018-03-1422:34:44","userweight":0,"oldlastloginip":"127.0.0.1","corpname_":"jeesite","corpcode_":"0","oldlogindate":"2018-03-1422:34:44","avatarurl":"/ctxpath/static/images/user1.jpg"},"result":"true","message":"登录成功!","sessionid":"5fe9c7c45ded4425b03eff8f78179637"}

在登录成功的信息里,也有个sessionid属性,该属性值将作为你以后访问系统的凭证,相当于token令牌,举例如下:

1、获取用户权限信息:http://127.0.0.1:8980/js/a/authinfo?__sid=5fe9c7c45ded4425b03eff8f781796372、获取用户菜单信息:http://127.0.0.1:8980/js/a/menutree?__sid=5fe9c7c45ded4425b03eff8f781796373、重新获取登录信息:http://127.0.0.1:8980/js/a/index.json?__sid=5fe9c7c45ded4425b03eff8f781796374、获取当前用户信息:http://127.0.0.1:8980/js/a/sys/user/info.json?__sid=5fe9c7c45ded4425b03eff8f78179637系统退出

http://127.0.0.1:8980/js/a/logout?__ajax=json&__sid=5fe9c7c45ded4425b03eff8f78179637

注意:无cookie环境下,必须要指定要退出的sessionid

返回json数据:

{"result":"true","message":"退出成功!"}接口发现

剩下的接口就不一一说明了,交给大家一个接口发现的方法。

所有连接加.json或.xml或增加__ajax=json参数,或增加__ajax=xml参数,则自动返回json或xml数据,而不返回视图,举例:

用户列表的访问地址是/a/sys/empuser/list,如果直接访问,则返回页面的视图界面,如果加后缀.json,则返回视图所需要的json数据,如:/a/sys/empuser/list.json,这样返回的数据,就可以在你的前端分离应用中使用了。

所有列表加载的数据均使用listdata为后缀获取数据,如用户列表的数据地址为/a/sys/empuser/listdata,则直接返回json数据。

listdata只是一个命名规则,如果你发现了不遵循规范的地址,怎么办?你可以通过chrome浏览器的开发者界面(f12),打开network,filter中选择xhr,好了,准备就绪,这是你点击列表里的查询按钮,即可监控到访问的数据的地址是什么

在你的controller映射方法上增加@responsebody即可返回json数据,而不返回视图

或者替换@controller为@restcontroller,则应用所有映射方法均返回json数据。

如果你想两用,就如接口发现章节所述,增加.json后缀即可。

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服