跳到主内容

Spring Boot

casdoor-spring-boot-example 是关于如何在 SpringBoot 项目中使用 casdoor-spring-boot-starter 的示例。 我们将向您展示以下步骤。

第 1 步: 部署Casdoor

第一,应部先部署Casdoor。

您可以参考 服务安装 的 Casdoor 官方文档。 请在 生产模式 中部署您的 castor 实例。

在成功部署后,您需要确保:

  • 打开您最喜欢的浏览器并访问 http://localhost:8000,您将看到Casdoor的登录页面。
  • 输入 admin123 测试登录功能正常工作。

然后您可以通过以下步骤在自己的应用程序中快速实现基于 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>

第 3 步: 初始化配置

初始化需要6个参数,它们都是字符串类型。 | 名称(按顺序排列) | 必选项 | 描述 | | ---------------- | --- | ----------------------------------------- | | endpoint | 是 | Casdoor 服务URL, 例如 http://localhost:8000 | | clientId | 是 | Application.client_id | | clientSecret | 是 | Application.client_secret | | certificate | Yes | Application.certificate | | organizationName | 是 | Application.organization | | applicationName | 否 | Application.name | 您可以使用 Java properties 或 YAML 文件来初始化,如下所示。

casdoor.endpoint = http://localhost:8000
casdoor.clientId = <client-id>
casdoor.clientSecret = <client-secret>
casdoor.certificate = <certificate>
casdoor.organizationName = built-in
casdoor.applicationName = app-built-in
注意事项

您应该用您自己的 Casdoor 实例替换配置,特别是 clientId, clientSecretjwtPublicKey

第 4 步: 重定向到登录页面

当您需要访问您的应用程序的身份验证时,您可以发送目标 url 并重定向到 Casdoor 提供的登录页面。 请确保您已提前在应用配置中添加回调 url(例如 http://localhost:8080/login)。

@Resource
private CasdoorAuthService casdoorAuthService;

@RequestMapping("toLogin")
public String toLogin() {
return "redirect:" + casdoorAuthService.getSigninUrl("http://localhost:8080/login");
}

第 5 步: 获取令牌并解析

在 Casdoor 验证通过后,它将被重定向到您的应用程序,并带有 code 和状态。

您可以获取 code 并调用 getOAuthToken 方法,然后解析出 jwt 令牌。

Casdoor User 包含了由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:/";
}

Service

这两种情况的示例如下所示:

  • 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一体化的信息。