الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في تطبيق القيد الأمني على صفحة jsp

مغلق
بدأه JavaPorgrammer في 10 ديسمبر 2010 · 12 رد · 1,243 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله .. أسعد الله" مساءكم/صباحكم " بكل خير..

يا إخوة : عندي دالة تتحكم في توجيه الـ request في الموقع ..

protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String base = "/app/";
        String url = base+"index.jsp";
        String action = request.getParameter("action");

        if(action != null){
        if(action.equals(CATEGORIES)){
        url = base+"categories.jsp";
        }
 else if(action.equals(PROD_DETAILS)){
     url = base+"product_details.jsp";
 }
 else if(action.equals(SEARCH)){
 url = base+"search.jsp";
 }
 else if(action.equals(CART)){
 url = base+"cart.jsp";
 }
 else if(action.equals(CHECK)){
 url = base+"/protected/customer/checkOut.jsp";
 //send(request,response);
 }
        else if (action.equals("addShoppingItem") ||
        action.equals("updateShoppingItem") ||
        action.equals("deleteShoppingItem") ||
        action.equals("displayShoppingCart"))
        url = base + "cart.jsp";


        }
        RequestDispatcher req = getServletContext().getRequestDispatcher(url);
        req.forward(request, response);
    }

أضفت قيد للوصول إلى صفحة checkout.jsp

 <security-constraint>
        <display-name>Constraint1</display-name>
        <web-resource-collection>
            <web-resource-name>customerPages</web-resource-name>
            <description/>
            <url-pattern>/app/protected/customer/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>customer</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/errorSignIn.jsp</form-error-page>
        </form-login-config>
    </login-config>
    <security-role>
        <description/>
        <role-name>customer</role-name>
    </security-role>

لكن :unsure: للأسف لم يعمل! هل المشكلة من الرابط مثلا؟ جربت أكثر من طريقة وللأسف

أرجو المساعدة..

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#2

أظن المشكله أنك عمل forward في حالة ال

url = base+"/protected/customer/checkOut.jsp

أظن هنا يجب أن تكون redirect ... و إلا كيف لل web container أن يتعرف على ال URL الخاص بالصفحه؟!

ملاحظه أخري :

الكود جميل جدا .... ينقصك شئ واحد بس :

قم بحذف

if(action != null)

و إستخدم في باقي الفحوصات الشكل التالي:

"string".equals(variable)

لأن equals تتفحص ال parameter ... لو وجدته ب Null تقوم بإرجاع false

جرب ما قلته لك ... و إن لم تعمل .. قم بإرفاق الكود ..

#3

حياك أخي هويدي .. شاكر لك تفاعلك معي. :blush: .

سبق وجربت redirect ولكن يعطيني هذا الاستن :wacko: ثناء :

ype Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.IllegalStateException: Cannot forward after response has been committed
	cn.control.doPost(control.java:117)
	cn.control.doGet(control.java:74)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.

وبالنسبة للملاحظة الأولى ، في الأصل هو يستقبل query string فإذا صار المتغير null يحوله إلى الصفحة الرئيسة..

..الله يسعدك..

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#4

هنا كود الـ action :

<TD COLSPAN="5"><A HREF="<%=base%>?action=checkOut">Check Out</A>  |
              <A HREF="<%=base%>?action=categories">continue shopping </A></TD>

وهذا في الـ servlet :

else if(action.equals(CHECK)){
 url = base+"/protected/customer/checkOut.jsp";
 response.sendRedirect(url);

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#5

قم بعمل التالي:

else if(action.equals(CHECK)){
 url = base+"/protected/customer/checkOut.jsp";
 response.sendRedirect(url);
 return;
 }

فأنت لا تستطيع أن تعمل forward بعد redirect لذا ... قمنا بإنهاء الداله بإستخدا return ....

#6

حصل لي هذا الاستثناء :

type Status report

message /app/protected/customer/checkOut.jsp

description The requested resource (/app/protected/customer/checkOut.jsp) is not available.

 :wacko:

تم تعديل هذه المشاركة بواسطة JavaPorgrammer في 10 ديسمبر 2010 في 18:42

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#7

من الواضح أن المشكله تظهر قبل الوصول لمرحلة ال authentication .. للتأكد .. قم بعمل comment لأسطر ال auth من web.xml..

إذن ... هل هذه الصفحه أصلا موجوده تحت WebContents ؟

أم أنها موجوده في مكان أخر؟

#8

كل شيء سليم يا أخ هويدي ..

الصفحة موجودة داخل الـ web content ..

المشكلة فقط لما اعمل لها تحويل من الـ servlet فقط! ، ولو عملت لها تشغيل أو تحويل من رابط عادي تشتغل تمام !

:unsure:

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#9

أظن الخطأ هنا:

This method can accept relative URLs

وبالتالي .. قم بحذف ال slash من بداية ال url المرسل لل reponse.sendRedirect ...

فيكون :

response.sendRedirect("app/protected/customer/checkOut.jsp")

Get it?

#10

الله يرضى عليك ويسعدك ..

اشتغل الكود معاي تمام..

عندي سؤال آخر :

<form id="login" onsubmit="return validate_form ( );" method="POST" action="j_security_check">
 <table width="443px" height="316px" border="0" cellpadding="2" cellspacing="2" background="../styleImg/border.jpg">
    <tr>
      <td height="47"><div align="center"><span class="style16">user name or email : </span></div></td>
    </tr>
    <tr>
      <td height="34" align="center"><label>
              <input id="username" align="center" name="j_username" type="text" size="40" />
      </label></td>
    </tr>
    <tr>
      <td height="50"><div align="center"><span class="style16">password : </span></div></td>
    </tr>
    <tr>
      <td height="47" align="center"><input align="center" name="j_password" type="password" size="40" /></td>
    </tr>
    <tr>
      <td height="23" align="center"><div align="center"><span class="style14">forgot password? | sign up </span></div></td>
    </tr>
    <tr>
      <td align="center">
        <label>
            <input type="reset" name="reset" value="Reset" style="width: 120px;" />
          </label>
          <input type="submit" name="submit" value="Login" style="width: 120px;" />
        <label></label>

      </td>
    </tr>
  </table>

      </form>

كيف اصل إلى الـ session object من هذا الفورم لأنه مربوط في الـ tomcat؟ اقصد مثلا لو أردت أن أعرض اسم المستخدم الحالي ..

:huh: أرجو أن تتحمل أسئلتي الغير منتهية

تم تعديل هذه المشاركة بواسطة JavaPorgrammer في 10 ديسمبر 2010 في 21:04

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#11

أولا رجاء قم بفتح موضوع جديد لكل سؤال على حده..

ثانيا ..بالنسه للسؤال:

طبعا هذه صفحة JSP ... وإن كانت HTML قم بتغير الإمتداد لتصبح .jsp ..

للوصول لل session object من خلال صفحات ال JSP أمامك حللان ..

1- إستخدام Scritplets ... و هو كتابة كود جافا داخل صفحات ال JSP بحيث يكون داخل

<% و%>

مثال:

<b> Hello 
<%
	String user = (String) session.getAttribute("username");
	out.println(user);
	// note that: out, session, request, response and many other objects are exits by default, you don't need to get a reference to them
%>

</b>

2- بإستخدام JSTL ... و هي طريقه متقدمه , اكثر وضوحا و جمالا ...

#12

الله يعافيك أخ هويدي

آسف أني لم أفتح هذا السؤال في موضوع مستقل :blush:

هذا الفورم مرتبط بالـسيرفر .. للأسف لا أستطيع الوصول إلى الـ session objects :

:wacko:

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#13

إطبع رسالة الخطأ (في موضوع جديد :) )

هذا الموضوع مغلق.

مواضيع مشابهة