مرحبا
أبحث عن كود مكتوب بالـ JSF اقدر عن طريقه عمل log in انه اذا كانت اسم المستخدم وكلمة المرور صحيحة فانه يحولني الى الصفحة المطلوبة
هل يعرف احد كيف
مرحبا
أبحث عن كود مكتوب بالـ JSF اقدر عن طريقه عمل log in انه اذا كانت اسم المستخدم وكلمة المرور صحيحة فانه يحولني الى الصفحة المطلوبة
هل يعرف احد كيف
تم تعديل هذه المشاركة بواسطة ahmadoovic في 19 يونيو 2014 في 21:37
المسألة هنا ليست JSF أو غيرها انما الجهد الحقيقي هو كود الجافا الذي يعمل مقارنة بين اسم المستخدم وكلمة المرور فاذا كانا صحيحين سيمررك للصفحة والا فسيطلب منك التحقق منهما
إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ
رسم المخططات البيانية بواسطة الجافا
كتاب تحليل وتصميم نظم المعلومات
هل لديك أخي طريقة الحل
سوف أكتب الكود واقدمه لك قريبا
إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ
رسم المخططات البيانية بواسطة الجافا
كتاب تحليل وتصميم نظم المعلومات
http://programming-simplified.com/ دى مجموعه كورسات فى منها مجانى. سوف تجد ,ejb,jba jsf مجانى . اول ثلاث محاضرات فى jsf سيمكنك من عمل ما تطلبه
في البداية ننشا صنف جافا ليتحكم بالبيانات التي سيقوم المستخدم باداخالها (اسم المستخدم وكلمة المرور) حيث سيقوم بفحصهم ومقارنتهم باسم المستخدم وكلمة المرور الخاصة به في قاعدة البيانات.
فاذا كانت كلمة المرور واسم المستخدم صحيحين عندئذ سيتم تحويلي الى الصفحة التي اريدها
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;
}
}<?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
إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ
رسم المخططات البيانية بواسطة الجافا
كتاب تحليل وتصميم نظم المعلومات
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 ؟
كيف اتحقق من تسجيل دخول قبل فتح الصفح؟
اقتباس
لكن ماذا اذا ادخل المستخدم الرابط "myPage" بدون المرور عبر الـlogin.xhmlt ؟
كيف اتحقق من تسجيل دخول قبل فتح الصفح؟
في هذه الحالة نستعمل filter
إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة
فما أحوجني إلى دعوة صالحة من أخ لي كريم
أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز
مشكور :)
yassine_hell كتب:لكن ماذا اذا ادخل المستخدم الرابط "myPage" بدون المرور عبر الـlogin.xhmlt ؟
كيف اتحقق من تسجيل دخول قبل فتح الصفح؟
نعم حينئذ تحتاج عمل Filter لكن أيضا يجب اضافة اخرى لملف الـ web.xml
تم تعديل هذه المشاركة بواسطة vector_ever في 19 يوليو 2014 في 04:55
إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ
رسم المخططات البيانية بواسطة الجافا
كتاب تحليل وتصميم نظم المعلومات
هذه الشيفرة المصدرية للحيلولة دون قدرة السمتحدم على الولوج الى الصفحة المحمية 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
إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ
رسم المخططات البيانية بواسطة الجافا
كتاب تحليل وتصميم نظم المعلومات
الفخ الآخر الذي يقع فيه الكثيرون هو انه حتى لو كان لدي فلتر يمنعني من الوصولو المباشر عن طريق الـ 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
إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ
رسم المخططات البيانية بواسطة الجافا
كتاب تحليل وتصميم نظم المعلومات
حل أكثر من رائع ما شاء الله
شكراً لك أخي على الايضاح