هل لا يزال من الممكن استدعاء نصوص الويب في الهواء الطلق بعد انتهاء مهلة الجلسة؟

StackOverflow https://stackoverflow.com//questions/12685236

سؤال

ما أفعله هو أنني قمت بتعيين كل من الهواء الطلق والمشاركة في وقت انتهاء الجلسة لمدة 60 دقيقة في ملف web.xml الخاص بهم.

السيناريو الخاص بي هو

  1. عندما أرغب في بدء تشغيل سير عمل في بدء تشغيل سير العمل ، أملأ جميع البيانات اللازمة ولكن لا تنقر فوق زر "بدء سير العمل".
  2. بعد انتهاء مهلة الجلسة، أنقر فوق الزر "بدء سير العمل".
  3. في المرة الأولى ، يفتح مربع المصادقة ويطلب اسم المستخدم وكلمة المرور.
  4. لقد ملأت اسم المستخدم وكلمة المرور لمستخدم آخر.
  5. يبدأ سير العمل مع مستخدم آخر تمت مصادقته.
  6. في أوقات أخرى لمهلة الجلسة ، لا يطلب مربع المصادقة ، ولكنه يعمل للمستخدم المصادق مسبقًا مسبقًا.

لذلك أعتقد لماذا يحدث ذلك؟؟؟هل هو بسبب الكعكة؟؟

توجد حاليًا أربعة ملفات تعريف ارتباط مستخدمة، وهي alfLogin وalfUsername2 وJSSESSIONID و_alfTest.فقط عندما يتم تسجيل خروج المستخدم، يتم حذف ملف تعريف الارتباط alfUsername2 ويظل الآخرون. وقت انتهاء صلاحية ملفات تعريف الارتباط alfLogin وalfUsername2 هو 7 أيام وتعتمد ملفات تعريف الارتباط الأخرى على الجلسة.

هل لا يزال من الممكن استخدام البرنامج النصي للويب في الهواء الطلق بعد انتهاء مهلة الجلسة؟ إذا كان الأمر كذلك، كيف يمكنني تجنب هذه الحالة؟

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

المحلول

على الرغم من أنني يجب أن أجيب على سؤالي بنفسي، إلا أنني أريد فقط مشاركة نتيجتي.لا بد لي من تتبع الكثير.لكن الجواب بسيط جدا.

أولا، ليس بسبب ملفات تعريف الارتباط.

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

تتم جميع المكالمات إلى نص الويب في الهواء الطلق بواسطة EndPointProxyController خاصة org.springframework.extensions.webscripts.servlet.mvc.EndPointProxyController في spring-webscripts-1.0.0-sources.jar.

في handleRequestInternal إذا لم تكن هناك جلسة وكان basicHttpAuthChallenge صحيحًا، فسيظهر مربع المصادقة الأساسية على النحو التالي.

            else if (this.basicHttpAuthChallenge || descriptor.getBasicAuth())
            {
                // check for HTTP authorisation request (i.e. RSS feeds, direct links etc.)
                String authorization = req.getHeader("Authorization");
                if (authorization == null || authorization.length() == 0)
                {
                    res.setStatus(HttpServletResponse.SC_UNAUTHORIZED,
                            "No USER_ID found in session and requested endpoint requires authentication.");
                    res.setHeader("WWW-Authenticate", "Basic realm=\"Alfresco\"");

                    // no further processing as authentication is required but not provided
                    // the browser will now prompt the user for appropriate credentials
                    return null;
                }
                else
                {
// other coding
                }   

يمكننا تجنب هذا الشرط كما

في endpointController ل مقلاع-التطبيق-context.xml, ، يتغير basicHttpAuthChallenge إلى خطأ.

يحب

   <!-- Override EndPointProxyController to enable Basic HTTP auth challenge on 401 response -->
   <bean id="endpointController" class="org.springframework.extensions.webscripts.servlet.mvc.EndPointProxyController">
      <property name="cacheSeconds" value="-1" />
      <property name="useExpiresHeader"><value>true</value></property>
      <property name="useCacheControlHeader"><value>true</value></property>
      <property name="configService" ref="web.config" />
      <property name="connectorService" ref="connector.service" />
      <property name="supportedMethods"><null/></property>
      <property name="basicHttpAuthChallenge"><value>false</value></property>
   </bean>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top