文档章节

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

ThinkGem
 ThinkGem
发布于 03/21 22:43
字数 1391
阅读 6163
收藏 8

引言

有不少朋友咨询我,想用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:<script src="${ctxStatic}/common/des.js?${_version}"></script>

Java: com.jeesite.common.codec.DesUtils

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

JS:

<script>
var secretKey = '${@Global.getConfig("shiro.loginSubmit.secretKey")}';
var username = DesUtils.encode('system', secretKey);
var password = DesUtils.encode('admin', secretKey);
console.log('&username=' + username + '&password=' + password);
</script>

Java:

String secretKey = Global.getConfig("shiro.loginSubmit.secretKey");
String username = DesUtils.encode("system", secretKey);
String password = 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):
   &param_deviceType=mobileApp
2、可以指定登录的系统(区分不同的菜单,默认default)
   &param_sysCode=mobileApp
3、可以指定登录页面和主框架页的视图(默认:employee)
   &param_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-14 22:34:44",
		"userWeight": 0,
		"oldLastLoginIp": "127.0.0.1",
		"corpName_": "JeeSite",
		"corpCode_": "0",
		"oldLoginDate": "2018-03-14 22: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=5fe9c7c45ded4425b03eff8f78179637
2、获取用户菜单信息:
  http://127.0.0.1:8980/js/a/menuTree?__sid=5fe9c7c45ded4425b03eff8f78179637
3、重新获取登录信息:
  http://127.0.0.1:8980/js/a/index.json?__sid=5fe9c7c45ded4425b03eff8f78179637
4、获取当前用户信息:
  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,好了,准备就绪,这是你点击列表里的查询按钮,即可监控到访问的数据的地址是什么

开发一个API接口

在你的Controller映射方法上增加@ResponseBody即可返回JSON数据,而不返回视图

或者替换@Controller为@RestController,则应用所有映射方法均返回JSON数据。

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

另外,对于移动端或高并发的应用对于流量是非常珍贵的,通过通用方法可能会返回一些很多无用的数据,这时,你最好单独覆写Rest清理无用的数据为null,则不会返回到前台。

© 著作权归作者所有

共有 人打赏支持
ThinkGem

ThinkGem

粉丝 1013
博文 137
码字总数 22174
作品 1
济南
架构师
私信 提问
加载中

评论(11)

孟凡振

引用来自“ThinkGem”的评论

引用来自“fengsong97”的评论

引用来自“ThinkGem”的评论

引用来自“kellysupeng”的评论

请知悉开源版,用户数不可超过100个,最大允许10个用户同时在线(不含匿名)。
这个条件的限制,意味着开源版本不能做企业级开发,只能用作学习使用了么。

你好,可以商用,但是只能用做于用户量不大的小项目,目前关注jeesite可免费领取一个个人版许可
好多文档 , 以哪里的文档 为主 呢?

http://jeesite4.mydoc.io
大神,关注后如何获取个人许可?
ThinkGem
ThinkGem

引用来自“fengsong97”的评论

引用来自“ThinkGem”的评论

引用来自“kellysupeng”的评论

请知悉开源版,用户数不可超过100个,最大允许10个用户同时在线(不含匿名)。
这个条件的限制,意味着开源版本不能做企业级开发,只能用作学习使用了么。

你好,可以商用,但是只能用做于用户量不大的小项目,目前关注jeesite可免费领取一个个人版许可
好多文档 , 以哪里的文档 为主 呢?

http://jeesite4.mydoc.io
fengsong97
fengsong97

引用来自“ThinkGem”的评论

引用来自“kellysupeng”的评论

请知悉开源版,用户数不可超过100个,最大允许10个用户同时在线(不含匿名)。
这个条件的限制,意味着开源版本不能做企业级开发,只能用作学习使用了么。

你好,可以商用,但是只能用做于用户量不大的小项目,目前关注jeesite可免费领取一个个人版许可
好多文档 , 以哪里的文档 为主 呢?
vaforever
vaforever
震哥用了jeesite好久了,能给个个人版许可吗?:confounded:
ThinkGem
ThinkGem

引用来自“明朗1024”的评论

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

1、获取用户权限信息:
http://127.0.0.1:8980/js/a/authInfo?__sid=5fe9c7c45ded4425b03eff8f78179637
2、获取用户菜单信息:
http://127.0.0.1:8980/js/a/menuTree?__sid=5fe9c7c45ded4425b03eff8f78179637

试了一下 这个__sid 没有作用,加不加都能返回结果
必须在无cookie下访问,否则会先读取cookie里的sid
明朗1024
明朗1024
在登录成功的信息里,也有个 sessionid 属性,该属性值将作为你以后访问系统的凭证,相当于token令牌,举例如下:

1、获取用户权限信息:
http://127.0.0.1:8980/js/a/authInfo?__sid=5fe9c7c45ded4425b03eff8f78179637
2、获取用户菜单信息:
http://127.0.0.1:8980/js/a/menuTree?__sid=5fe9c7c45ded4425b03eff8f78179637

试了一下 这个__sid 没有作用,加不加都能返回结果
ThinkGem
ThinkGem

引用来自“kellysupeng”的评论

请知悉开源版,用户数不可超过100个,最大允许10个用户同时在线(不含匿名)。
这个条件的限制,意味着开源版本不能做企业级开发,只能用作学习使用了么。

你好,可以商用,但是只能用做于用户量不大的小项目,目前关注jeesite可免费领取一个个人版许可
k
kellysupeng
请知悉开源版,用户数不可超过100个,最大允许10个用户同时在线(不含匿名)。
这个条件的限制,意味着开源版本不能做企业级开发,只能用作学习使用了么。
k
kellysupeng
请问下,之前的1.6能升级到4.0么
梧桐宇宇
梧桐宇宇
写的特别好,也很全面,有没有什么视频可以查看的?或者技术指导的,想学习你的代码
ThinkGem/JeeSite 4.0

引言 JeeSite 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis、Beetl、Bootstrap、AdminLTE),在线代码生成功能,包括核心模块如:...

ThinkGem
02/25
0
0
jeesite 快速开发平台 初体验

http://www.jeesite.com/ GitHub:https://github.com/thinkgem/jeesite 开源中国:http://git.oschina.net/thinkgem/jeesite 更多文档 https://github.com/thinkgem/jeesite/tree/master/do......

晨猫
05/21
0
0
JeeSite环境搭建及运行和打包(master20161117)

涉及的软件: 1、phpStudy(主要用MySql) 2、maven3(用于依赖包,下面我将上传已经下载好所有依赖包的版本,保证运行正常) 具体操作: 0、前言 由于GitHub上的Release版本没有及时更新,所...

easonjim
2016/11/18
0
0
jeesite配置指南(官方文档有坑,我把坑填了!)

版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/72871340 昨天,远在苏州的朋友找我一起做个私活,主要用到jeesite。 说实话,开发了这么多年的...

qing_gee
2017/06/05
0
0
ThinkGem/JeeSite 4.0 JFlow工作流引擎-表单引擎

项目介绍 jeesite4-jflow jeesite4-JFlow 是jeesite集成JFlow的版本. 您即可以使用jeesite的敏捷性开发,也可以使用JFlow的流程引擎,表单引擎的功能. 我们已经把jeesite与jflow的组织结构集...

ThinkGem
08/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何处理JavaScript 中的货币值?

 金钱无处不在。   无论在银行应用程序、电子商务网站还是证券交易所平台,我们每天都在与金钱互动。我们也越来越依赖技术来处理问题。   然而,关于如何以编程处理货币价值尚无共识。虽...

数据星河
11分钟前
3
0
并发中的volatile

1. 概述 由于线程有本地内存的存在, 一个线程修改的共享变量不会及时的刷新到主内存中, 使得另一个线程读取共享变量时读取到的仍旧是旧值, 就导致了内存可见性问题. 现在volatile就可以解决这...

Ala6
12分钟前
6
0
三大特性之---封装

封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能...

architect刘源源
15分钟前
2
0
设计模式 之 策略模式

设计模式 之 策略模式 定义 提供几个算法策略,选择其中一个策略去执行。 优点 由于将算法封装成单独的策略,策略可以灵活切换。 扩展性好,符合开闭原则。 缺点 策略多,类也会变多 策略类需...

GMarshal
15分钟前
2
0
HBase集群监控的那些事儿

为什么需要监控? 为了保证系统的稳定性,可靠性,可运维性。 掌控集群的核心性能指标,了解集群的性能表现; 集群出现问题时及时报警,便于运维同学及时修复问题; 集群重要指标值异常时进行...

微笑向暖wx
16分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部