Spring Cloud Gateway
El casdoor-springcloud-gateway-example es un ejemplo de cómo usar el casdoor-spring-boot-starter como un plugin OAuth2 en Spring Cloud Gateway. Los pasos para usarlo se describen a continuación.
Paso 1: Desplegar Casdoor
Deploy Casdoor in production mode. See Server installation. Ensure the server is reachable and you can sign in at the login page (e.g. admin / 123).
Paso 2: Inicializar un Spring Cloud Gateway
Use the example code as-is or adapt it to your application.
Necesita un servicio de puerta de enlace y al menos un servicio empresarial. En este ejemplo, casdoor-gateway es el servicio de puerta de enlace y casdoor-api es el servicio empresarial.
Paso 3: Incluir la dependencia
Añada la dependencia casdoor-spring-boot-starter a su proyecto de Spring Cloud Gateway.
Para 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>
Para Gradle:
// https://mvnrepository.com/artifact/org.casbin/casdoor-spring-boot-starter
implementation group: 'org.casbin', name: 'casdoor-spring-boot-starter', version: '1.x.y'
Paso 4: Configurar sus propiedades
La inicialización requiere 6 parámetros, todos los cuales son de tipo string.
| Nombre (en orden) | Requerido | Descripción |
|---|---|---|
| endpoint | Sí | URL del Servidor Casdoor, como http://localhost:8000 |
| clientId | Sí | Application.client_id |
| clientSecret | Sí | Application.client_secret |
| certificate | Sí | Application.certificate |
| organizationName | Sí | Application.organization |
| applicationName | No | Application.name |
Initialize these parameters via Java properties or YAML.
Para propiedades:
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
Para 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
Configure gateway routing as well. Para YAML:
spring:
application:
name: casdoor-gateway
cloud:
gateway:
routes:
- id: api-route
uri: http://localhost:9091
predicates:
- Path=/api/**
Paso 5: Añadir el CasdoorAuthFilter
Añada una clase de implementación de la interfaz GlobalFilter a la puerta de enlace para la verificación de identidad, como el CasdoorAuthFilter utilizado en este ejemplo.
Si la autenticación falla, devuelve un código de estado 401 al frontend para redirigirlos a la interfaz de inicio de sesión.
@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();
});
}
}
Paso 6: Obtener el Servicio y usarlo
Ahora proporciona 5 servicios: CasdoorAuthService, CasdoorUserService, CasdoorEmailService, CasdoorSmsService y CasdoorResourceService.
Create them in the Gateway project as follows.
@Resource
private CasdoorAuthService casdoorAuthService;
When the app requires authentication, redirect to Casdoor's login page with the target URL.
Add the callback URL (e.g. http://localhost:9090/callback) to the Casdoor application in advance.
@RequestMapping("login")
public Mono<String> login() {
return Mono.just("redirect:" + casdoorAuthService.getSigninUrl("http://localhost:9090/callback"));
}
After Casdoor verifies the user, the app is redirected back with a code and state; use the code and getOAuthToken to obtain the JWT.
CasdoorUser holds the user info from Casdoor; use it to establish the session in your app.
@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:/");
});
}
Ejemplos de las APIs se muestran a continuación.
- 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());
Paso 7: Reiniciar el proyecto
After starting the project, open your favorite browser and visit http://localhost:9090. Luego haga clic en cualquier botón que solicite recursos de casdoor-api.

The gateway triggers auth; unauthenticated users are redirected to the login page. Click Login.

The Casdoor login page is shown.

After login, you are redirected to the main interface; you can proceed to use the app.

Además
For more on Java integration, see the following projects and docs.