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

عمل log in عن طريق jsf

بدأه ahmadoovic في 19 يونيو 2014 · 13 رد · 1,743 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا

 

أبحث عن كود مكتوب بالـ JSF  اقدر عن طريقه عمل log in انه اذا كانت اسم المستخدم وكلمة المرور صحيحة فانه يحولني الى الصفحة المطلوبة

 

هل يعرف احد كيف

تم تعديل هذه المشاركة بواسطة ahmadoovic في 19 يونيو 2014 في 21:37

#2

المسألة هنا ليست JSF أو غيرها  انما الجهد الحقيقي هو كود الجافا الذي يعمل مقارنة بين اسم المستخدم وكلمة المرور فاذا كانا صحيحين سيمررك للصفحة والا فسيطلب منك التحقق منهما

1

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#3

هل لديك أخي طريقة الحل

#4

سوف أكتب الكود واقدمه لك قريبا

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#5

http://programming-simplified.com/      دى مجموعه كورسات فى منها مجانى.      سوف تجد ,ejb,jba jsf     مجانى      .   اول ثلاث محاضرات فى  jsf  سيمكنك من عمل ما تطلبه 

#6

في البداية ننشا صنف جافا ليتحكم بالبيانات التي سيقوم المستخدم باداخالها (اسم المستخدم وكلمة المرور) حيث سيقوم بفحصهم ومقارنتهم باسم المستخدم وكلمة المرور الخاصة به في قاعدة البيانات.

فاذا كانت كلمة المرور واسم المستخدم صحيحين عندئذ سيتم تحويلي الى الصفحة التي اريدها

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

/**
*
* @author ralmoued
*/
@ManagedBean(name = "admin")
@RequestScoped
public class Administrator {

private static final long serialVersionUID = 1L;

private transient Connection con;

private String username;
private String password;
private String message;

/**
* Initialisiert Mysql-Verbindung
*/
public Administrator() {
try {
Class.forName("com.mysql.jdbc.Driver");

} catch (SQLException ex) {
Logger.getLogger(Administrator.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Administrator.class.getName()).log(Level.SEVERE, null, ex);
}
}

public String getUsername() {
return username;
}

public void setUsernamee(String username) {
this.username= username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

/**
* check if the username and password are correct.
* you must have a table (administrator )in database (dbase)
* with tow attribute Username and Password.
* @return true if die login done successfully.
*/
public boolean checkLogin() {
boolean login = false;
try (Statement stmt = con.createStatement() [;)] {
String sql = "SELECT * FROM dbase.administrator "
+ "Where Username='" + username + "' "
+ "AND Password='" + password + "' ";
ResultSet result = stmt.executeQuery(sql);

// If this user already exist
if (result.next()) {
System.out.println("Hello " + username);
login = true;
} else {
System.out.println("Error");
setMessage("username or Password is not correct ");
}
} catch (SQLException e) {
e.printStackTrace();
}
return login;
}


/**
* If username and password both are correct
* @return Bearbeitungsseite.
*/
public String bearbeitungsseite() {
boolean check = checkLogin();
while (check) {
return "myPage?faces-redirect=true";
}
return null;
}

}
ننشأ صفحة نسميها login.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Login</title>
    </h:head>
    <h:body>
        <div style="width:1100px; border-width:1.5px; border-color:black; border-radius: 20px;
             border-style:solid; margin-bottom: 20px; margin-top: 20px;
             margin-left: 50px; margin-right: 50px; background-color: #D2B48C">

            <h:form id="form" style="margin-left: 50px; margin-right: 50px; 
                    margin-top: 20px; margin-bottom: 20px">
                <h2>Please enter the user name and password</h2>
                <table>
                    <tr>
                        <td>Username:</td>
                        <td><p:inputText id="userName" required="true" 
                                         label="userName" size="23" value="#{admin.username}" 
                                         requiredMessage=" Username is required"
                                         validatorMessage=" username must be at least 3 characters">
                                <f:validateRegex  for="userName" pattern="(([0-9a-zA-Z]*).{3,})"/>
                            </p:inputText>
                            <p:watermark for="userName" value="Username *" />
                            <h:message for="userName" style="color:red" /></td>
                    </tr>     
                    <tr>
                        <td>Password:</td>
                        <td><p:password id="pwd" value="#{admin.password}" label="Password"
                                        size="23" required="true"
                                        requiredMessage=" Password is required">
                            </p:password>
                            <p:watermark for="pwd" value="Password *" />
                            <h:message for="pwd" style="color:red" /><br/></td>
                    </tr>
                </table>

                <table>
                    <tr>
                        <td><p:commandButton value="Log in" action="#{admin.bearbeitungsseite()}"
                                             update="@form" 
                                             style="margin-top: 10px; margin-left: 125px"/></td>
                    </tr>
                    <tr>  
                        <tr></tr>
                        <tr></tr>
                        <td><h:outputText value="#{admin.message}"
                                          style="color: red;margin-left: 125px"/></td>
                    </tr>
                </table>
            </h:form>

            </h:body>
</html>

بالتوفيق

تم تعديل هذه المشاركة بواسطة vector_ever في 24 يونيو 2014 في 18:16

1

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#7
vector_ever كتب:

في البداية ننشا صنف جافا ليتحكم بالبيانات التي سيقوم المستخدم باداخالها (اسم المستخدم وكلمة المرور) حيث سيقوم بفحصهم ومقارنتهم باسم المستخدم وكلمة المرور الخاصة به في قاعدة البيانات.

فاذا كانت كلمة المرور واسم المستخدم صحيحين عندئذ سيتم تحويلي الى الصفحة التي اريدها

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

/**
*
* @author ralmoued
*/
@ManagedBean(name = "admin")
@RequestScoped
public class Administrator {

private static final long serialVersionUID = 1L;

private transient Connection con;

private String username;
private String password;
private String message;

/**
* Initialisiert Mysql-Verbindung
*/
public Administrator() {
try {
Class.forName("com.mysql.jdbc.Driver");

} catch (SQLException ex) {
Logger.getLogger(Administrator.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Administrator.class.getName()).log(Level.SEVERE, null, ex);
}
}

public String getUsername() {
return username;
}

public void setUsernamee(String username) {
this.username= username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

/**
* check if the username and password are correct.
* you must have a table (administrator )in database (dbase)
* with tow attribute Username and Password.
* @return true if die login done successfully.
*/
public boolean checkLogin() {
boolean login = false;
try (Statement stmt = con.createStatement() [;)] {
String sql = "SELECT * FROM dbase.administrator "
+ "Where Username='" + username + "' "
+ "AND Password='" + password + "' ";
ResultSet result = stmt.executeQuery(sql);

// If this user already exist
if (result.next()) {
System.out.println("Hello " + username);
login = true;
} else {
System.out.println("Error");
setMessage("username or Password is not correct ");
}
} catch (SQLException e) {
e.printStackTrace();
}
return login;
}


/**
* If username and password both are correct
* @return Bearbeitungsseite.
*/
public String bearbeitungsseite() {
boolean check = checkLogin();
while (check) {
return "myPage?faces-redirect=true";
}
return null;
}

}
ننشأ صفحة نسميها login.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Login</title>
    </h:head>
    <h:body>
        <div style="width:1100px; border-width:1.5px; border-color:black; border-radius: 20px;
             border-style:solid; margin-bottom: 20px; margin-top: 20px;
             margin-left: 50px; margin-right: 50px; background-color: #D2B48C">

            <h:form id="form" style="margin-left: 50px; margin-right: 50px; 
                    margin-top: 20px; margin-bottom: 20px">
                <h2>Please enter the user name and password</h2>
                <table>
                    <tr>
                        <td>Username:</td>
                        <td><p:inputText id="userName" required="true" 
                                         label="userName" size="23" value="#{admin.username}" 
                                         requiredMessage=" Username is required"
                                         validatorMessage=" username must be at least 3 characters">
                                <f:validateRegex  for="userName" pattern="(([0-9a-zA-Z]*).{3,})"/>
                            </p:inputText>
                            <p:watermark for="userName" value="Username *" />
                            <h:message for="userName" style="color:red" /></td>
                    </tr>     
                    <tr>
                        <td>Password:</td>
                        <td><p:password id="pwd" value="#{admin.password}" label="Password"
                                        size="23" required="true"
                                        requiredMessage=" Password is required">
                            </p:password>
                            <p:watermark for="pwd" value="Password *" />
                            <h:message for="pwd" style="color:red" /><br/></td>
                    </tr>
                </table>

                <table>
                    <tr>
                        <td><p:commandButton value="Log in" action="#{admin.bearbeitungsseite()}"
                                             update="@form" 
                                             style="margin-top: 10px; margin-left: 125px"/></td>
                    </tr>
                    <tr>  
                        <tr></tr>
                        <tr></tr>
                        <td><h:outputText value="#{admin.message}"
                                          style="color: red;margin-left: 125px"/></td>
                    </tr>
                </table>
            </h:form>

            </h:body>
</html>

بالتوفيق

لكن ماذا اذا ادخل المستخدم الرابط "myPage" بدون المرور عبر الـlogin.xhmlt ؟

كيف اتحقق من تسجيل دخول قبل فتح الصفح؟

#8
اقتباس

 

لكن ماذا اذا ادخل المستخدم الرابط "myPage" بدون المرور عبر الـlogin.xhmlt ؟

كيف اتحقق من تسجيل دخول قبل فتح الصفح؟

في هذه الحالة نستعمل filter

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#9
هذى كود filter    وايظا ارسلت لك الكود الكاملا 

 

 

 

 

 

 

 

 

 

 

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebFilter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

/*

 * To change this license header, choose License Headers in Project Properties.

 * To change this template file, choose Tools | Templates

 * and open the template in the editor.

 */

/**

 *

 * @author revo

 */

@WebFilter(filterName = "filter", urlPatterns = {"*.xhtml"})

public class filter implements Filter {

    

    @Override

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    

    @Override

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request1 = (HttpServletRequest) request;

        HttpServletResponse response1 = (HttpServletResponse) response;

        String url = request1.getRequestURI();

        System.out.println(url);

        user u = (user) request1.getSession().getAttribute("user");

        if (u == null && url.contains("home.xhtml")) {

            System.out.println("1");

            response1.sendRedirect("index.xhtml");

        } else if (u != null&&!u.isIsLog() && url.contains("home.xhtml")) {

                        System.out.println("2");

 

            response1.sendRedirect("index.xhtml");

            

        } else if (u != null&&u.isIsLog() && (url.contains("index.xhtml")||url.equals("/Filter/"))) {

                        System.out.println("3");

 

            response1.sendRedirect("home.xhtml");

        } else {

                       System.out.println("4");

 

            chain.doFilter(request, response);

        }

    }

    

    @Override

    public void destroy() {

    }

    

}

 

Filter.rar

1
#10

مشكور  :)

#11
yassine_hell كتب:

لكن ماذا اذا ادخل المستخدم الرابط "myPage" بدون المرور عبر الـlogin.xhmlt ؟

كيف اتحقق من تسجيل دخول قبل فتح الصفح؟

نعم حينئذ تحتاج عمل Filter لكن أيضا يجب اضافة اخرى لملف الـ web.xml

تم تعديل هذه المشاركة بواسطة vector_ever في 19 يوليو 2014 في 04:55

1

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#12

 هذه الشيفرة المصدرية للحيلولة دون قدرة السمتحدم على الولوج الى الصفحة المحمية myPage بدون ان يعمل log in يعني حتى لو طلب myPage عن طريق الـ URL مباشرة فانه لن ينجح وسيتم اعادته الى صفحة التسجيل login

package packageName;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;




/**
 *
 * @author ralmoued
 */


public class LoginFilter implements Filter {

 @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // Get the loginBean from session attribute
        Login loginBean = (Login)((HttpServletRequest)request).getSession().getAttribute("admin");
        // System.out.println("loginBean value: " + loginBean);
       
        if (loginBean == null || !loginBean.isLoggedIn()) {
            String contextPath = ((HttpServletRequest)request).getContextPath();
            ((HttpServletResponse)response).sendRedirect(contextPath + "/login.xhtml");
        }
         
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
      
    }


    @Override
    public void destroy() {
    }  
     
}

 

نذهب لملف web.xml ونقوم باضافة مايلي:

<!-- Login filter -->
    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>packageName.LoginFilter</filter-class>
    </filter>
    <!-- Set the login filter to secure all the pages in the /mySecurePage/* path of the application -->
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/mySecurePage/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>

mySecurePages  الموجودة في <url-pattern>/mySecurePage/*</url-pattern> هو عبارة عن المجلد الذي يجوي كل الصفحات التي أستطيع المحمية التي لا أستطيع الولوج اليها بدون تسجيل Log in

تم تعديل هذه المشاركة بواسطة vector_ever في 19 يوليو 2014 في 05:03

1

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#13

الفخ الآخر الذي يقع فيه الكثيرون هو انه حتى لو كان لدي فلتر يمنعني من الوصولو المباشر عن طريق الـ URL للصفحة المحمية myPage هو انني لو قمت بتسجيل الخروج log out  وتم تحويلي بشكل اوتوماتيكي الى اي صفحة ثانية فانه يمكنني بكل سهولة العودة الى myPage عن طريق زر back الموجود في متصفح الانترنت وقتها تصبح عملية تسجيل الخروج غير مفيدة ويبقى العملية كلها غير مؤمنة.

 

الحل هو ازالة الكاش وقتها لن يكون بمقدار زر back  ان يعود بنا الى حيث كنا وهذا هو المطلوب

package packageName;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletResponse;
import javax.servlet.ServletRequest;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletResponse;


/**
 *
 * @author ralmoued
 */


public class NoCacheFilter implements Filter {
  private FilterConfig filterConfig = null;
  
  @Override
  public void init(FilterConfig filterConfig) {
    this.filterConfig = filterConfig;
  }
  
  @Override
  public void destroy() {
    this.filterConfig = null;
  }


  /*The real work happens in doFilter(). 
  The reference to the response object is of type ServletResponse,
  so we need to cast it to HttpServletResponse:
  */


  @Override
  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain)
      throws IOException, ServletException {
    HttpServletResponse httpResponse = (HttpServletResponse) response;


    /*Then we just set the appropriate headers
    and invoke the next filter in the chain:
    */
    httpResponse.setHeader("Cache-Control", "no-cache");
    httpResponse.setDateHeader("Expires", 0);
    httpResponse.setHeader("Pragma", "No-cache");
    chain.doFilter(request, response);
    /* this method calls other filters in the order they are 
    written in web.xml
    */
  }
}

بعد ذلك يجب تعريف هذا الكود في ملف الـ web.xml حيث نقوم باضافة مايلي

<!-- Cahe filter -->
    <filter>
        <display-name>NoCacheFilter</display-name>
        <filter-name>NoCacheFilter</filter-name>
        <filter-class>packageName.NoCacheFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>NoCacheFilter</filter-name>
        <url-pattern>/mySecurePages/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>

من الضروري والمهم جدا معرفة ان هذه العملية حساسة ويجب ان تتم بدقة والا فاننا سنقوم بحذف الكاش من كل الصفحات وهذا ما لا نريده...نحن نريد حذف الكاش فقط من صفحات معينة بعد عملية تسجيل الخروج

وهذا يتم عن طريق الأمر التالي الموجود  في ملف الـ web.xml

  <url-pattern>/mySecurePages/*</url-pattern>

حيث حددنا كل الصفحات الموجودة تحت المسار mySecurePages سوف يتم حذف الكاش منها ولن تكون قادرا على العودة اليها بعد تسجيل الخروج حتى لو استعملت زرة العودة للخلف back في متصفح الانترنت

تم تعديل هذه المشاركة بواسطة vector_ever في 19 يوليو 2014 في 05:03

1

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#14

حل أكثر من رائع ما شاء الله

شكراً لك أخي على الايضاح

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