التخطي إلى المحتوى الرئيسي

Spring Cloud Gateway

الcasdoor-springcloud-gateway-example هو مثال على كيفية استخدام casdoor-spring-boot-starter كمكون إضافي OAuth2 في Spring Cloud Gateway. الخطوات المستخدمة موضحة أدناه.

الخطوة 1: نشر Casdoor

أولاً، يجب نشر Casdoor. يمكنك الرجوع إلى وثائق Casdoor الرسمية لـ تثبيت الخادم. يرجى نشر نسخة Casdoor الخاصة بك في وضع الإنتاج.

بعد نشر ناجح، تحتاج إلى التأكد من الآتي:

  • افتح متصفحك المفضل وزر http://localhost:8000. سترى صفحة تسجيل الدخول لـ Casdoor.
  • أدخل admin و 123 لاختبار إذا كانت وظيفة تسجيل الدخول تعمل بشكل جيد.

بعد ذلك، يمكنك تنفيذ صفحة تسجيل دخول تعتمد على Casdoor بسرعة في تطبيقك الخاص باستخدام الخطوات التالية.

الخطوة 2: تهيئة Spring Cloud Gateway

يمكنك استخدام الكود من هذا المثال مباشرة أو دمجه مع كود عملك الخاص.

تحتاج إلى خدمة بوابة وخدمة عمل واحدة على الأقل. في هذا المثال، casdoor-gateway هي خدمة البوابة و casdoor-api هي خدمة العمل.

الخطوة 3: تضمين التبعية

أضف تبعية casdoor-spring-boot-starter إلى مشروع Spring Cloud Gateway الخاص بك.

لـ Apache Maven:

/casdoor-gateway/pom.xml
<!-- 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>

لـ Gradle:

// https://mvnrepository.com/artifact/org.casbin/casdoor-spring-boot-starter
implementation group: 'org.casbin', name: 'casdoor-spring-boot-starter', version: '1.x.y'

الخطوة 4: تكوين الخصائص الخاصة بك

التهيئة تتطلب 6 معاملات، وجميعها من نوع string.

الاسم (حسب الترتيب)مطلوبالوصف
endpointنعمعنوان URL لخادم Casdoor، مثل http://localhost:8000
clientIdنعمApplication.client_id
clientSecretنعمApplication.client_secret
certificateنعمApplication.certificate
organizationNameنعمApplication.organization
applicationNameلاApplication.name

يمكنك استخدام خصائص Java أو ملفات 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

لـ 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

بالإضافة إلى ذلك، تحتاج إلى تكوين توجيه البوابة. لـ YAML:

spring:
application:
name: casdoor-gateway
cloud:
gateway:
routes:
- id: api-route
uri: http://localhost:9091
predicates:
- Path=/api/**

الخطوة 5: إضافة CasdoorAuthFilter

أضف فئة تنفيذية لواجهة GlobalFilter إلى البوابة للتحقق من الهوية، مثل CasdoorAuthFilter المستخدم في هذا المثال.

إذا فشلت المصادقة، فإنه يعيد رمز الحالة 401 إلى الواجهة الأمامية لإعادة توجيههم إلى واجهة تسجيل الدخول.

@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();
});
}
}

الخطوة 6: الحصول على الخدمة واستخدامها

الآن توفر 5 خدمات: CasdoorAuthService، CasdoorUserService، CasdoorEmailService، CasdoorSmsService، و CasdoorResourceService.

يمكنك إنشاؤها كما يلي في مشروع البوابة.

@Resource
private CasdoorAuthService casdoorAuthService;

عندما تحتاج إلى التحقق من الهوية للوصول إلى تطبيقك، يمكنك إرسال عنوان URL الهدف وإعادة التوجيه إلى صفحة تسجيل الدخول التي يوفرها Casdoor.

يرجى التأكد من أنك قد أضفت عنوان URL للرد (مثلاً، http://localhost:9090/callback) في تكوين التطبيق مسبقًا.

@RequestMapping("login")
public Mono<String> login() {
return Mono.just("redirect:" + casdoorAuthService.getSigninUrl("http://localhost:9090/callback"));
}

بعد التحقق الناجح من قبل Casdoor، سيتم إعادة التوجيه إلى تطبيقك مع رمز وحالة. يمكنك الحصول على الرمز واستدعاء الدالة getOAuthToken لتحليل الرمز المميز JWT.

CasdoorUser يحتوي على المعلومات الأساسية عن المستخدم التي يوفرها Casdoor. يمكنك استخدامه ككلمة مفتاحية لضبط الجلسة في تطبيقك.

@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:/");
});
}

أمثلة على واجهات برمجة التطبيقات معروضة أدناه.

  • 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());

الخطوة 7: إعادة تشغيل المشروع

بعد بدء المشروع، افتح متصفحك المفضل وزر http://localhost:9090. ثم انقر على أي زر يطلب موارد من casdoor-api.

الفهرس

سيتم تشغيل منطق المصادقة للبوابة. بما أنك لم تقم بتسجيل الدخول، سيتم توجيهك إلى واجهة تسجيل الدخول. انقر على زر تسجيل الدخول.

toLogin

يمكنك رؤية منصة تسجيل الدخول الموحدة لـ Casdoor.

تسجيل الدخول

بعد تسجيل الدخول بنجاح، سيتم توجيهك إلى الواجهة الرئيسية. الآن يمكنك النقر على أي زر.

index-ok

ماذا أيضا

يمكنك استكشاف المشاريع/الوثائق التالية لمعرفة المزيد عن تكامل Java مع Casdoor.