Spring Cloud
casdoor-spring-boot-example 是关于如何在 SpringBoot 项目中使用 casdoor-spring-boot-starter 的示例。 Spring Cloud 也是如此。 我们将向您展示以下步骤。
步骤1. 部署Casdoor
第一,应部署Casdoor。
您可以参考 服务安装 的 Casdoor 官方文档。 请在 生产模式 中部署您的 castor 实例。
在成功部署后,您需要确保:
- 打开您最喜欢的浏览器并访问 http://localhost:8000,您将看到Casdoor的登录页面。
- 输入
admin
和123
测试登录功能正常工作。
然后您可以通过以下步骤在自己的应用程序中快速实现基于 Casdoor 的登录页面。
步骤2. 导入 casdoor-spring-boot-starter
您可以使用 maven 或 gradle 导入 casdoor-spring-boot-starter。
<!-- https://mvnrepository.com/artifact/org.casbin/casdoor-spring-boot-starter -->
<dependency>
<groupId>org.casbin</groupId>
<artifactId>casdoor-spring-boot-starter</artifactId>
<version>1.x.y</version>
</dependency>
// https://mvnrepository.com/artifact/org.casbin/casdoor-spring-boot-starter
implementation group: 'org.casbin', name: 'casdoor-spring-boot-starter', version: '1.x.y'
步骤3. 初始化配置
初始化需要 6 个参数,它们都是字符串类型:名称(按顺序排列) | 是否必须 | 描述 |
---|---|---|
endpoint | 是 | Casdoor 服务URL, 例如 http://localhost:8000 |
clientId | 是 | 客户端ID |
clientSecret | 是 | 客户端秘钥 |
jwtPublicKey | 是 | Casdoor 应用程序证书的公钥 |
organizationName | 是 | 应用程序组织 |
applicationName | 否 | 应用程序名称 |
您可以使用 Java properties 或 YAML 文件来初始化,如下所示。
casdoor.endpoint = http://localhost:8000
casdoor.clientId = <client-id>
casdoor.clientSecret = <client-secret>
casdoor.jwtSecret = <jwt-public-key>
casdoor.organizationName = built-in
casdoor.applicationName = app-built-in
casdoor:
endpoint: http://localhost:8000
client-id: <client-id>
client-secret: <client-secret>
jwt-public-key: <jwt-public-key>
organization-name: built-in
application-name: app-built-in
您应该用您自己的 Casdoor 实例替换配置,特别是 clientId
, clientSecret
和 jwtPublicKey
。
步骤3. 服务发现
- 什么是注册表
注册表在微型服务项目中发挥着非常重要的作用。 它们是微型服务结构中的链接,类似于记录服务和服务地址图的地址簿。 在分布式结构中,服务在这里注册。 并且当某个服务需要调用另一个服务时,它会找到服务的地址并调用。
- 为什么使用注册表
注册表负责处理服务发现的问题。 在没有注册表的情况下,服务之间调用需要知道所称方的地址或代理地址。 当服务更改其部署地址时,它必须更改调用中指定的地址或改变代理配置。 在注册表中,每个服务只需要在呼叫他人时知道服务名,并且地址将通过注册表同步。
Nacos服务发现
Nacos是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云端本地应用程序。
从发布下载&版本
下载
1) 从Github下载源代码
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
2) 下载运行的包
下载 nacos-server-$version.zip form https://github.com/alibaba/nacos/releases.
unzip nacos-server-$version.zip or tar -xvf nacos-server-$version.tar.gz
cd nacos/bin
启动服务器
Linux/Unix/Mac
运行下面的命令以启动(独立表示非集群模式):
sh startup.sh -m standalone
- Windows
转到nacos/bin 目录,运行下面的命令来启动(独立表示非集群模式):
startup.cmd -m standalone
Nacosprovide 一个视觉操作平台,启动服务器,打开您最喜欢的浏览器并访问 http://localhost:8848/nacos ,默认用户名和密码是 nacos
。
如何使用
- 添加依赖关系
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 添加 Nacos 配置
spring:
application:
name: casdoor-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
- 通过添加 @EnableDiscoveryClient
启动服务器来启用服务发现。查看Nacos 控制台的服务列表
步骤4. 配置中心
您也可以使用 nacos 配置,在配置中心放置这些 casdoor 配置
介绍
什么是配置中心?
在微型服务结构中,当系统从一个应用程序分成一个分布式系统上的服务节点时, 配置文件必须迁移(拆分),以便分散配置,权力下放则是多余的。 一般来说,一个配置中心是一个基本的服务组成部分,负责集中管理各种应用程序的配置。
为什么要使用配置中心?
配置中心将配置与应用程序分开,并以统一的方式管理配置。 应用程序不需要管理配置本身。
Nacos 配置中心
Nacos是别墅的开放源码平台,用于动态服务发现、配置管理和服务管理,这种平台更容易构建云端原生应用。
如何使用
- 添加依赖关系
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 在
bootstrap.yml 中添加 Nacos 配置
application:
name: casdoor-service
profiles:
active: dev
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
配置文件加载优先级(从最高到低) bootstrap.properties ->bootstrap.yml -> application.properties -> application.yml
3. 通过添加 @EnableDiscoveryClient 将配置添加到配置中心 (Data Id) 来启用服务发现
在 Nacos Spring Cloud, `dataId` 的格式如下: `${prefix}-${spring.profiles.active}。${file-extension}`
prefix
默认是spring.application.name
的值。 您也可以在spring.cloud.nacos.config.prefix
中配置此值。spring.profiles.activity
是当前环境的配置文件。file-exetension
是配置内容的数据格式,可以在spring.cloud.nacos.config.file-extension
中进行配置。
我们可以将我们的 dataId
匹配为 casdo-service-dev.properties
,配置格式是 properties
,
配置内容是 第3步的配置, 这样 步骤 3 的配置文件可以放置到 nacos 配置中心。
步骤5. 重定向到登录页面
当您需要访问您的应用程序的身份验证时,您可以发送目标 url 并重定向到 Casdoor 提供的登录页面。
请确保您已提前在应用配置中添加回调 url(例如 http://localhost:8080/login)。
@Resource
private CasdoorAuthService casdoorAuthService;
@RequestMapping("toLogin")
public String toLogin() {
return "redirect:" + casdoorAuthService.getSigninUrl("http://localhost:8080/login");
}
步骤6. 获取 token 并解析
在 Casdoor 验证通过后,它将被重定向到您的应用程序,并带有 code 和状态。
您可以获取 code 并调用 getOAuthToken
方法,然后解析出 jwt 令牌。
CasdoorUser
包含了 Casdoor 提供的用户基本信息,您可以将其作为关键字在您的应用程序中设置会话。
@RequestMapping("login")
public String login(String code, String state, HttpServletRequest request) {
String token = "";
CasdoorUser user = null;
try {
token = casdoorAuthService.getOAuthToken(code, state);
user = casdoorAuthService.parseJwtToken(token);
} catch (CasdoorAuthException e) {
e.printStackTrace();
}
HttpSession session = request.getSession();
session.setAttribute("casdoorUser", user);
return "redirect:/";
}
服务
这两种情况的示例如下所示:
- CasdoorAuthService
String token = casdoorAuthService.getOAuthToken(code, "app-built-in");
CasdoorUser casdoorUser = casdoorAuthService.parseJwtToken(token);
- CasdoorUserService
CasdoorUser casdoorUser = casdoorUserService.getUser("admin");
CasdoorUser casdoorUser = casdoorUserService.getUserByEmail("admin@example.com");
CasdoorUser[] casdoorUsers = casdoorUserService.getUsers();
CasdoorUser[] casdoorUsers = casdoorUserService.getSortedUsers("created_time", 5);
int count = casdoorUserService.getUserCount("0");
CasdoorResponse response = casdoorUserService.addUser(user);
CasdoorResponse response = casdoorUserService.updateUser(user);
CasdoorResponse response = casdoorUserService.deleteUser(user);
- CasdoorEmailService
CasdoorResponse response = casdoorEmailService.sendEmail(title, content, sender, receiver);
- CasdoorSmsService
CasdoorResponse response = casdoorSmsService.sendSms(randomCode(), receiver);
- CasdoorResourceService
CasdoorResponse response = casdoorResourceService.uploadResource(user, tag, parent, fullFilePath, file);
CasdoorResponse response = casdoorResourceService.deleteResource(file.getName());
更多内容
您可以探索以下项目/文件来了解更多关于Java 与Casdoor一体化的信息。