Spring Cloud Gateway
Das casdoor-springcloud-gateway-example ist ein Beispiel dafür, wie man den casdoor-spring-boot-starter als OAuth2-Plugin in Spring Cloud Gateway verwendet. Die Schritte zur Verwendung sind unten beschrieben.
Schritt 1: Casdoor einrichten
Zuerst sollte Casdoor eingerichtet werden. Sie können sich auf die offizielle Casdoor-Dokumentation für die Serverinstallation beziehen. Bitte setzen Sie Ihre Casdoor-Instanz im Produktionsmodus ein.
Nach einer erfolgreichen Einrichtung müssen Sie folgendes sicherstellen:
- Öffnen Sie Ihren bevorzugten Browser und besuchen Sie http://localhost:8000. Sie werden die Login-Seite von Casdoor sehen.
- Geben Sie adminund123ein, um zu testen, ob die Login-Funktionalität einwandfrei funktioniert.
Danach können Sie schnell eine Casdoor-basierte Login-Seite in Ihrer eigenen App mit den folgenden Schritten implementieren.
Schritt 2: Ein Spring Cloud Gateway initialisieren
Sie können den Code aus diesem Beispiel direkt verwenden oder ihn mit Ihrem eigenen Geschäftskode kombinieren.
Sie benötigen einen Gateway-Service und mindestens einen Geschäftsservice. In diesem Beispiel ist casdoor-gateway der Gateway-Service und casdoor-api der Geschäftsservice.
Schritt 3: Die Abhängigkeit einbinden
Fügen Sie die Abhängigkeit casdoor-spring-boot-starter zu Ihrem Spring Cloud Gateway-Projekt hinzu.
Für Apache Maven:
<!-- 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>
Für Gradle:
// https://mvnrepository.com/artifact/org.casbin/casdoor-spring-boot-starter
implementation group: 'org.casbin', name: 'casdoor-spring-boot-starter', version: '1.x.y'
Schritt 4: Konfigurieren Sie Ihre Eigenschaften
Die Initialisierung erfordert 6 Parameter, die alle vom Typ String sind.
| Name (in Reihenfolge) | Erforderlich | Beschreibung | 
|---|---|---|
| endpoint | Ja | Casdoor Server-URL, wie zum Beispiel http://localhost:8000 | 
| clientId | Ja | Application.client_id | 
| clientSecret | Ja | Application.client_secret | 
| certificate | Ja | Application.certificate | 
| organizationName | Ja | Application.organization | 
| applicationName | Nein | Application.name | 
Sie können Java-Eigenschaften oder YAML-Dateien verwenden, um diese Parameter zu initialisieren.
Für Eigenschaften:
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
Für YAML:
casdoor:
  endpoint: http://localhost:8000
  client-id: <client-id>
  client-secret: <client-secret>
  certificate: <certificate>
  organization-name: built-in
  application-name: app-built-in
Zusätzlich müssen Sie das Gateway-Routing konfigurieren. Für YAML:
spring:
  application:
    name: casdoor-gateway
  cloud:
    gateway:
      routes:
        - id: api-route
          uri: http://localhost:9091
          predicates:
            - Path=/api/**
Schritt 5: Den CasdoorAuthFilter hinzufügen
Fügen Sie eine Implementierungsklasse des GlobalFilter-Interfaces zum Gateway für die Identitätsüberprüfung hinzu, wie zum Beispiel den CasdoorAuthFilter, der in diesem Beispiel verwendet wird.
Wenn die Authentifizierung fehlschlägt, wird ein 401-Statuscode an das Frontend zurückgegeben, um sie zur Login-Schnittstelle umzuleiten.
@Component
public class CasdoorAuthFilter implements GlobalFilter, Ordered {
    private static final Logger LOGGER = LoggerFactory.getLogger(CasdoorAuthFilter.class);
    @Override public int getOrder() {
        return 0;
    }
    @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        return exchange.getSession().flatMap(webSession -> {
            CasdoorUser user = webSession.getAttribute("casdoorUser");
            if (user != null) {
                return chain.filter(exchange);
            }
            ServerHttpResponse response = exchange.getResponse();
            response.setStatusCode(HttpStatus.UNAUTHORIZED);
            response.getHeaders().add("Content-Type", "application/json");
            return response.setComplete();
        });
    }
}
Schritt 6: Den Service abrufen und verwenden
Jetzt bieten 5 Dienste an: CasdoorAuthService, CasdoorUserService, CasdoorEmailService, CasdoorSmsService und CasdoorResourceService.
Sie können sie wie folgt im Gateway-Projekt erstellen.
@Resource
private CasdoorAuthService casdoorAuthService;
Wenn Sie eine Authentifizierung für den Zugriff auf Ihre App benötigen, können Sie die Ziel-URL senden und zur Login-Seite weiterleiten, die von Casdoor bereitgestellt wird.
Bitte stellen Sie sicher, dass Sie die Callback-URL (z.B. http://localhost:9090/callback) im Voraus in der Anwendungskonfiguration hinzugefügt haben.
@RequestMapping("login")
public Mono<String> login() {
    return Mono.just("redirect:" + casdoorAuthService.getSigninUrl("http://localhost:9090/callback"));
}
Nach erfolgreicher Überprüfung durch Casdoor wird es mit einem Code und Zustand zurück zu Ihrer Anwendung umgeleitet. Sie können den Code erhalten und die Methode getOAuthToken aufrufen, um das JWT-Token herauszuparsen.
CasdoorUser enthält die grundlegenden Informationen über den Benutzer, die von Casdoor bereitgestellt werden. Sie können es als Schlüsselwort verwenden, um die Sitzung in Ihrer Anwendung zu setzen.
@RequestMapping("callback")
public Mono<String> callback(String code, String state, ServerWebExchange exchange) {
    String token = "";
    CasdoorUser user = null;
    try {
        token = casdoorAuthService.getOAuthToken(code, state);
        user = casdoorAuthService.parseJwtToken(token);
    } catch(CasdoorAuthException e) {
        e.printStackTrace();
    }
    CasdoorUser finalUser = user;
    return exchange.getSession().flatMap(session -> {
        session.getAttributes().put("casdoorUser", finalUser);
        return Mono.just("redirect:/");
    });
}
Beispiele für die APIs werden unten gezeigt.
- 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());
 
Schritt 7: Das Projekt neu starten
Nach dem Starten des Projekts öffnen Sie Ihren bevorzugten Browser und besuchen Sie http://localhost:9090. Klicken Sie dann auf eine beliebige Schaltfläche, die Ressourcen von casdoor-api anfordert.

Die Authentifizierungslogik des Gateways wird ausgelöst. Da Sie nicht eingeloggt sind, werden Sie zur Login-Schnittstelle umgeleitet. Klicken Sie auf die Login-Schaltfläche.

Sie können die einheitliche Login-Plattform von Casdoor sehen.

Nach einem erfolgreichen Login werden Sie zur Hauptoberfläche umgeleitet. Jetzt können Sie auf eine beliebige Schaltfläche klicken.

Was noch
Sie können die folgenden Projekte/Dokumentationen erkunden, um mehr über die Integration von Java mit Casdoor zu erfahren.