سؤال

أنا أستخدم المصادقة القائمة على النموذج (JBoss / JAAS) ولكن النموذج الخاص بي يرسل البيانات إلى Servlet حتى أتمكن من أداء بعض الشيكات قبل محاولة تسجيل الدخول.

الآن أحتاج إلى الأمام إلى j_security_check ولكن ما حاولت لم أعمل به (خطأ 404) ...

كيف يمكنني إعادة توجيه / إلى الأمام إلى j_security_check (يرجى ملاحظة أن التطبيق يعمل عبر HTTPS / SSSL)؟

يمكنني أن أجعلها تعمل مع إعادة التوجيه والمعاربة تذهب في عنوان URL، ولكن هذا غير آمن (كمستخدم / تمرير يبقى في سجل المتصفح، إلخ) ...

أيه أفكار؟

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

المحلول

أرى أن هذا منصب قديم، لكنني أردت مشاركة إجابة.

إذا كان الطلب الأصلي هو المنشور، يمكنك ببساطة إعادة توجيه إلى J_Security_check بعد إجراء بعض المعالجة.

...
request.getParameterMap().put( "j_username", new String[]{ userId } );
request.getParameterMap().put( "j_password", new String[]{ password } );

try 
{
    request.getRequestDispatcher("/j_security_check").forward( request , response );
    return null;
} 
catch (ServletException e) 
{
    logger.error( e );
} 
catch (IOException e)
{
    logger.error( e );
}

نصائح أخرى

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

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

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    String user = req.getParameter("j_username");
    String pass = req.getParameter("j_password");

    resp.sendRedirect("/Project-web/j_security_check?j_username=" + user    + "&j_password=" + pass);

}

منذ أن كان لدي نفس المشكلة، ولم أثبت إجابات الآخرين أن تعمل من أجلي، أردت مشاركة الحل الخاص بي:

1) إنشاء JSP جديد، قل، LoginForward.jsp، لأغراض إعادة التوجيه فقط:

<%@ page language="java" %>
<%
    final String username = request.getParameter("j_username");
    final String password = request.getParameter("j_password");
%>
<body onload="document.getElementById('creds').submit()">
    <form name="creds" id='creds' method="POST" action="j_security_check">
        <input type="hidden" name="j_username" value="<%= username %>">
        <input type="hidden" name="j_password" value="<%= password %>">
    </form>
</body>

2) في سيرله، إلى الأمام إلى هذا JSP:

final String redirectURL = String.format("loginForward.jsp j_username=%s&j_password=%s", username, password);
RequestDispatcher requestDispatcher = request.getRequestDispatcher(redirectURL);
requestDispatcher.forward(request, response);
return;    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top