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:
<!-- 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
.
سيتم تشغيل منطق المصادقة للبوابة. بما أنك لم تقم بتسجيل الدخول، سيتم توجيهك إلى واجهة تسجيل الدخول. انقر على زر تسجيل الدخول.
يمكنك رؤية منصة تسجيل الدخول الموحدة لـ Casdoor.
بعد تسجيل الدخول بنجاح، سيتم توجيهك إلى الواجهة الرئيسية. الآن يمكنك النقر على أي زر.
ماذا أيضا
يمكنك استكشاف المشاريع/الوثائق التالية لمعرفة المزيد عن تكامل Java مع Casdoor.