JeeSite 快速开发平台
官方网站
    • 平台简介
    • 架构特点
    • 技术选型
    • 功能介绍
    • 安装部署
    • 常见问题
    • 目录结构
    • 更新日志
    • Vue 文档
    • BPM 文档
    • Cloud 文档
V4 演示
Vue 演示
💖联系
  • 我要提意见、文档纠错
  • JeeSite 代码库, 请⭐Star关注
  • JeeSite Vue 代码库, 请⭐关注
  • Spring Cloud 微服务架构
  • JeeSite 手机端/移动端
  • Flowable 中国式工作流
  • OAauth2 统一认证服务器
  • 政务内外网环境中间件
  • 访问 ThinkGem 官方博客
  • 点击进入,下拉查看动态
官方网站
    • 平台简介
    • 架构特点
    • 技术选型
    • 功能介绍
    • 安装部署
    • 常见问题
    • 目录结构
    • 更新日志
    • Vue 文档
    • BPM 文档
    • Cloud 文档
V4 演示
Vue 演示
💖联系
  • 我要提意见、文档纠错
  • JeeSite 代码库, 请⭐Star关注
  • JeeSite Vue 代码库, 请⭐关注
  • Spring Cloud 微服务架构
  • JeeSite 手机端/移动端
  • Flowable 中国式工作流
  • OAauth2 统一认证服务器
  • 政务内外网环境中间件
  • 访问 ThinkGem 官方博客
  • 点击进入,下拉查看动态
  • 快速了解

  • 开发手册

  • Vue 开发手册

  • 扩展功能专题

    • BPM 业务流程系统
    • 用户类型、类型扩展
    • 消息推送、消息提醒
    • 单点登录、OAuth2
      • 简单登录接口
        • 系统登录:
        • 系统退出:
      • Apereo CAS 集成
        • 分离版 CAS 配置方法
      • OAuth2 第三方登录
        • 使用方法配置:
        • 系统登录地址:
        • 授权回调地址:
      • 无条件登录接口
      • 手机 APP 登录
    • 作业监控、任务调度
    • 文件存储、对象存储
    • 可视化数据大屏
    • 在线报表设计器
    • 在线预览图片文档
    • 涉密 “三员” 管理
    • 手机端移动端、Uni-App
    • OAauth2 统一认证服务
  • 云服务技术架构

  • 技术服务与支持

SSO 单点登录、CAS、OAuth2、系统登录

JeeSite 支持登录方式如下:

1、SSO 简单登录 接口,实现快速登录系统

2、Apereo CAS 服务器集成,快速实现系统登录(个人版)

3、OAuth2 第三方登录,如:微信、QQ、支付宝、等等(专业版)

4、无条件登录,无需密码,仅允许通过 Java 内部调用,保证系统安全

# 简单登录接口

# 系统登录:

1、设置 application.yml(v4.0.x:jeesite.yml)的 shiro.sso.secretKey 快速登录安全Key,若不设置将无法使用该接口。

shiro:
  # 简单 SSO 登录相关配置
  sso:
	# 如果启用/sso/{username}/{token}单点登录,请修改此安全key并与单点登录系统key一致。
	# 安全KEY,随便写,写一个你自己的安全秘钥
    secretKey: thinkgem
    # 是否加密单点登录安全Key
    encryptKey: true
1
2
3
4
5
6
7
8

2、举例调用地址如下,调用完成后自动登录系统:

http://localhost/project/sso/{username}/{token}?url=/sys/user/list?p1=v1%26p2=v2&relogin=true
1
  • username: 登录名,数据库中的 login_code 字段。
  • token: 登录令牌,根据yml里配置的登录安全Key生产的密码。
  • url: 登录之后要跳转的地址,如果url中携带参数,请使用转义字符,如“&”号,使用“%26”转义。

token生成方式:

String username = "system"; // 登录系统名
String secretKey = "thinkgem"; // yml 中设置的 shiro.sso.secretKey 参数值。
String token = Md5Utils.md5(secretKey + username + DateUtils.getDate("yyyyMMdd"));

// 如果 shiro.sso.encryptKey 为 true,则 secretKey 会自动加密。
// 如果在本系统获取,则 secretKey 已经加密了,也可以通过下面这个简便方法获取。
String token = UserUtils.getSsoToken(username);
1
2
3
4
5
6
7

该接口源码(提供参考):

/modules/core/src/main/java/com/jeesite/modules/sys/web/SsoController.java

# 系统退出:

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

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

返回JSON数据:

{"result":"true","message":"退出成功!"}
1

# Apereo CAS 集成

CAS 客户端配置非常简单,开启如下配置,设置好服务于客户端跳转地址即可:

shiro:
  # Apereo CAS 相关配置(标准版)
  casServerUrl: http://127.0.0.1:8981/cas
  casClientUrl: http://127.0.0.1:8980/js
  loginUrl: ${shiro.casServerUrl}?service=${shiro.casClientUrl}${adminPath}/login-cas
  logoutUrl: ${shiro.casServerUrl}/logout?service=${shiro.loginUrl}
  successUrl: ${shiro.casClientUrl}${adminPath}/index
1
2
3
4
5
6
7

注意此功能是标准版功能,只有标准版以上版本才能使用。

# 分离版 CAS 配置方法

首先保证后端接口和前端页面在一个域名下,否则前后不能会话共享

1、后端配置 application.yml

shiro:
  # Apereo CAS 相关配置(标准版)
  casServerUrl: http://127.0.0.1:8981/cas
  casClientUrl: http://127.0.0.1:3100/js
  loginUrl: ${shiro.casServerUrl}?service=${shiro.casClientUrl}${adminPath}/login-cas
  logoutUrl: ${shiro.casServerUrl}/logout?service=${shiro.loginUrl}
  successUrl: ${shiro.casClientUrl}/../
1
2
3
4
5
6
7

提示:shiro.casClientUrl 为前端访问后端的接口地址,shiro.successUrl 为前端地址首页地址。

2、找到文件 /src/views/sys/login/Login.vue 全部内容替换为:

<script lang="ts" setup>
  window.location.href = '/js/a/login';
</script>
1
2
3

提示:/js 为后端接口,根据您项目情况前缀对应配置

3、找到文件 src/store/modules/user.ts 的 confirmLoginOut 方法替换为:

async confirmLoginOut() {
  window.location.href = '/js/a/logout';
},
1
2
3

提示:地址为调用后端接口退出,此接口会直接调用 cas 服务端的 logout。

# OAuth2 第三方登录

集成史上最全的第三方登录的开源库 JustAuth。目前已支持Github、Gitee、微博、钉钉、百度、Coding、腾讯云开发者平台、OSChina、支付宝、QQ、微信、淘宝、Google、Facebook、抖音、领英、小米、微软、今日头条、Teambition、StackOverflow、Pinterest、人人、华为、企业微信、酷家乐、Gitlab、美团、饿了么和推特等第三方平台的授权登录。

该模块提供完善的通用接口扩展,若上述没说到的,也可以自己方便扩展。

# 使用方法配置:

1、打开 web 的 pom.xml,加入如下模块依赖代码

<!-- 第三方账号登录 -->
<dependency>
	<groupId>com.jeesite</groupId>
	<artifactId>jeesite-module-oauth2</artifactId>
	<version>${project.parent.version}</version>
</dependency>
1
2
3
4
5
6

注意:v4.2.1+ 专业版提供,此模块依赖,请向售后人员索取。

2、配置参数:


# 第三方系统认证
oauth2:
  
  # 码云
  gitee:
    clientId: xxxxxx
    clientSecret: xxxxxx
    redirectUri: http://127.0.0.1:8980/js/oauth2/callback/gitee
    
  # 腾讯QQ
  qq:
    clientId: xxxxxx
    clientSecret: xxxxxx
    redirectUri: http://127.0.0.1:8980/js/oauth2/callback/qq
    unionid: xxxxxx
    
  # 微信开放平台
  weixin:
    clientId: xxxxxx
    clientSecret: xxxxxx
    redirectUri: http://127.0.0.1:8980/js/oauth2/callback/weixin
    
  # 微信公众平台
  weixin_mp:
    clientId: xxxxxx
    clientSecret: xxxxxx
    redirectUri: http://127.0.0.1:8980/js/oauth2/callback/weixin_mp
   
  # 企业微信 
  weixin_qy:
    clientId: xxxxxx
    clientSecret: xxxxxx
    redirectUri: http://127.0.0.1:8980/js/oauth2/callback/weixin_qy
    agentId: xxxxxx
    
  # 钉钉
  ding_talk:
    clientId: xxxxxx
    clientSecret: xxxxxx
    redirectUri: http://127.0.0.1:8980/js/oauth2/callback/ding_talk

  # JeeSite OAuth2 Server 统一认证中心
  jeesite:
    clientId: jeesite
    clientSecret: jeesite
    redirectUri: http://127.0.0.1:8980/js/oauth2/callback/jeesite
    serverUrl: http://127.0.0.1:9999/js

  # 自定义(v4.3.0)
  custom:
    clientId: xxxxxx
    clientSecret: xxxxxx
    redirectUri: http://127.0.0.1:8980/js/oauth2/callback/custom
    className: com.jeesite.modules.oauth2.request.AuthCustomRequest

  # 授权成功后的跳转地址 v5.3.0
  successUrl: ${shiro.successUrl}
  # 授权失败后的跳转地址
  failureUrl: ${adminPath}/login
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

上述等等,不一一列举,具体可以打开 Oauth2UserService 的 getAuthRequest 方法查看并扩展

若是 Vue 分离版,只需配置 oauth2.successUrl 为你的分离端前端地址即可。 如果你的版本为 5.3.0 之前版本,可同步更新 Gitee 源码仓库里 FormFilter.java 文件的 successUrl 部分。

v4.2.1 之前版本,因为使用了秘钥登录,所以还需要配置以下参数,新版本无需配置

shiro:
  # 简单 SSO 登录相关配置
  sso:
	# 如果启用/sso/{username}/{token}单点登录,请修改此安全key并与单点登录系统key一致。
	# 安全KEY,随便写,写一个你自己的安全秘钥
    secretKey: thinkgem
    # 是否加密单点登录安全Key
    encryptKey: true
1
2
3
4
5
6
7
8

# 系统登录地址:

地址格式:
http://127.0.0.1:8980/js/oauth2/login/第三方唯一标识

举例如下:
Gitee登录:http://127.0.0.1:8980/js/oauth2/login/gitee
QQ账号登录:http://127.0.0.1:8980/js/oauth2/login/qq
微信账号登录:http://127.0.0.1:8980/js/oauth2/login/weixin
JeeSite账号登录:http://127.0.0.1:8980/js/oauth2/login/jeesite
1
2
3
4
5
6
7
8

# 授权回调地址:

地址格式:
http://127.0.0.1:8980/js/oauth2/callback/第三方唯一标识

举例如下:
Gitee登录回调地址:http://127.0.0.1:8980/js/oauth2/callback/gitee
QQ账号登录回调地址:http://127.0.0.1:8980/js/oauth2/callback/qq
微信账号登录回调地址:http://127.0.0.1:8980/js/oauth2/callback/weixin
JeeSite账号登录回调地址:http://127.0.0.1:8980/js/oauth2/callback/jeesite
1
2
3
4
5
6
7
8

# 无条件登录接口

无条件也就是只需要用户名,无需密码去登录系统。该登录方法只允许通过 Java 内部调用登录,保证系统安全。

提示


推荐使用 Apifox 接口工具测试:  https://www.apifox.cn

v4.3.0+ 版本(重命名 FormAuthenticationFilter 类名为 FormFilter):

HttpServletRequest request = ServletUtils.getRequest();
HttpServletResponse response = ServletUtils.getResponse();
try {
	// FormToken 构造方法的三个参数:登录名、是否内部登录无条件、请求对象
	UserUtils.getSubject().login(new FormToken(username, true, request));
	System.out.println("登录成功,__sid=" + UserUtils.getSession().getId());
	FormFilter.onLoginSuccess(request, response);
} catch (AuthenticationException e) {
	FormFilter.onLoginFailure(e, request, response);
}
return null;
1
2
3
4
5
6
7
8
9
10
11

v4.2.2 增加内部登录方法,无需定义 SSO 秘钥,并优化输出信息:

HttpServletRequest request = ServletUtils.getRequest();
HttpServletResponse response = ServletUtils.getResponse();
try {
	// FormToken 构造方法的三个参数:登录名、是否内部登录无条件、请求对象
	UserUtils.getSubject().login(new FormToken(username, true, request));
	System.out.println("登录成功,__sid=" + UserUtils.getSession().getId());
	FormAuthenticationFilter.onLoginSuccess(request, response);
} catch (AuthenticationException e) {
	FormAuthenticationFilter.onLoginFailure(e, request, response);
}
return null;
1
2
3
4
5
6
7
8
9
10
11

v4.2.1 及之前版本,需要通过 SSO 登录方式,步骤如下:

1、设置 application.yml(v4.0.x:jeesite.yml)的 shiro.sso.secretKey 快速登录安全Key:

shiro:
  # 简单 SSO 登录相关配置
  sso:
	# 如果启用/sso/{username}/{token}单点登录,请修改此安全key并与单点登录系统key一致。
	# 安全KEY,随便写,写一个你自己的安全秘钥
    secretKey: thinkgem
    # 是否加密单点登录安全Key
    encryptKey: true
1
2
3
4
5
6
7
8

2、调用登录方法

try {
	String username = "admin";
	FormToken formToken = new FormToken();
	formToken.setUsername(username);
	formToken.setSsoToken(UserUtils.getSsoToken(username));
	//formToken.setParams(ServletUtils.getExtParams(request));
	UserUtils.getSubject().login(formToken);
	String sid = UserUtils.getSession().getId().toString();
	System.out.println("登录成功,__sid=" + sid);
} catch (AuthenticationException e) {
	if (!e.getMessage().startsWith("msg:")){
		throw new AuthenticationException("msg:登录失败,请联系管理员。", e);
	}
	throw e; // 登录失败,抛出异常
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 手机 APP 登录

详见:系统登录接口

进入 JeeSite 源码仓库页面,点击右上角 ⭐ Star 加星关注。

← 消息推送、消息提醒 作业监控、任务调度→

联系我们:s.jeesite.com  |  微信号:jeesitex  |  邮箱:jeesite@163.com
© 2013-2023 济南卓源软件有限公司 版权所有 | Theme Vdoing

关注 JeeSite 公众号,了解最新动态

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式