سؤال

أبحث عن طريقة أو API الحالية التي تتيح لك إضافة الرموز إلى طلبات تطبيق الويب. ربما داخل الجلسة ولكن لا يستمر. أو إذا كنت تستطيع مساعدتي من خلال تحديد طريقة فعالة للقيام بذلك

على سبيل المثال

1. الحصول على طلب => Servlet يولد رمزا ويطبعه في المنظر

2. إرجاع وجهة نظر مع رمز مخفي

<input type="hidden" name="token" value="UA37jdjs9UDJS3">
<input type="submit" name="deleteEmail" value="Delete">

3. طلب آخر => يتم تقديم النموذج والتحقق مما إذا كان الرمز المميز هو نفسه.

بعض الأشياء التي يجب ملاحظتها، إذا كانت هناك طلبات AJAX، فإن بعض الرموز الأخرى يجب أن تكون على قيد الحياة لعدد من الطلبات.

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

إذا فشل المستخدم في إكمال النموذج، فافعل من القيام بشيء آخر على الموقع، سيتعين حذف هذه الرموز أثناء عدم استخدامها.

ولكن ما هي أفضل طريقة لتنفيذ نظام مثل هذا،

هل لدى SPRING Security 3 نظام يمكنني استخدامه؟

داخل جافا، شاحنات، ربيع MVC، أمن الربيع 3 ومساحة السبات

هل كانت مفيدة؟

المحلول

هل ألقي نظرة على "نمط رمزية المزامنة" في وثائق الشجاعة في http://grails.org/doc/1.2.0/guide/single.html. ?

نصائح أخرى

ألق نظرة على مشروع HDIV في http://www.hdiv.org/. وبعد يفعلون هذا بالضبط هذا. حتى إذا كنت لا تستخدم رمز مشروع HDIV، فيمكنك المعلومات هناك خيارا كيفية القيام بذلك بنفسك. كان ذلك التمهيدا جيدا بالنسبة لي للتعرف على الرموز المعالجة لأشياء مثل CSRF وغيرها من الاستخدامات مثل ضوابط إرسال مزدوجة.

الفكر الأول هو أنك قد تستخدم فقط معرف الجلسة التي تم إنشاؤها بالفعل. ولكن إذا كنت تحاول شوكة الدولة، أود أن أقترح استخدام شيء مثل طبقات محادثة نموذج

لماذا لا تستخدم فقط Session_id أن حاوية الويب تنشئ لك عند الاتصال طلب / لمحنة ()?

إذا كنت ترغب في إنشاء "الرمز المميز" الخاص بك قد ترغب في التحقق من ملفات تعريف الارتباط. ملف تعريف الارتباط هو زوج من القيمة الرئيسية التي تم إرسالها كأجهزة HTTP بواسطة خادم ويب إلى مستعرض ويب ثم إرسالها دون تغيير من قبل المتصفح في كل مرة يصل إليها هذا الخادم.

لإنشاء ملف تعريف ارتباط في Servlet، يمكنك استخدام:

public void doGet ( HttpServletRequest request, HttpServletResponse response )
     throws ServletException, IOException {
  // Create a cookie
  Cookie c1 = new Cookie("yourdomain.token","the value");
  response.addCookie(c1);
 //build your response

}

سيتم تضمين ملف تعريف الارتباط تلقائيا في طلب HTTP التالي. يمكنك قراءة ذلك مرة أخرى مع:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
//build your response
}

لقد واجهت مؤخرا حالة استخدام لهذا.

إذا كانت نافذة تطبيق قديمة موجودة في المستعرض، فسيتم النقر فوق ارتباط تسجيل الدخول من نافذة متصفح أخرى، وإنشاء إجراء تسجيل الدخول لأول مرة جلسة جديدة، ثم إعادة توجيهها إلى نافذة التطبيق. هذا أثار طريقة طريقة تحميل Onunload في النافذة القديمة، والتي أسفرت عن طلب تسجيل الخروج إلى خادم تسجيل الدخول إلى المستخدم الجديد.

الاعتماد على حدث تحميل JavaScript لتسجيل الخروج يبدو نوعا من Crappy بالنسبة لي، ولكن لا يمكن تغيير ذلك، لذلك اخترنا القيام به كما اقترح المرجع كما وأضاف رمزا في كل عرض تقديمي، والتحقق من ذلك لكل طلب. يمنع هذا طلب تسجيل الخروج Onunload من إنهاء الجلسة الجديدة.

بالنسبة إلى أفضل طريقة، أود أن أقول أن هذا واضح جدا. يمكنك على سبيل المثال استخدام http://java.sun.com/j2se/1.5.0/docs/api/java/util/uuid.html. لتوليد مفاتيح فريدة من نوعها. إذا كنت تستخدم إطارا يستند إلى مكونات مثل Tapestry، فقد يكون JSF أو Wicket طريقة أكثر ربعا في التعامل مع هذا.

هل هذا مشابه ل USECASE الخاص بك؟ أم أنك تحاول تحقيق شيء مختلف تماما؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top