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

مشكة فى عمل Filter على ال Admin Page

بدأه shokry3 في 28 يوليو 2013 · 1 رد · 772 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اكنت اريد حلا لهذه المشكلة

وهى بتوضيح انى اعمل invalidate لل session عند الضغط على log out link ولكن عند الضغط على back فى ال browser أعود الى هذه الصفحة مرة اخرى

مع العلم انى قمت بعمل filter  على هذه الصفحة لمنع الدخول اليها الا بعد عمل log in اولا

 

هذه هى صفحة ال     adminTamplate.xhtm

<?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:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="./resources/css/default.css" rel="stylesheet" type="text/css" />
<link href="./resources/css/cssLayout.css" rel="stylesheet" type="text/css" />
<title>Welcome</title>
</h:head>
<h:body style="background: url('./resources/images/back.jpg') no-repeat center center fixed; width: 100%; height: 100%">

<div id="top" >

<h:graphicImage value="./resources/images/univ1.jpg" width="850" height="200"/>

</div>
<div id="content" class="center_content" style="background-color: white;">
<div class="header">
<h:graphicImage value="./resources/images/univ.jpg" width="700" height="50"/>
</div>

<p:toolbar styleClass="tabHeader">
<p:toolbarGroup styleClass="width_100" align="left">
<h:form styleClass="width_100">
<p:commandButton id="adminUniversityId" action="adminUniversity.xhtml" value="University" ajax="false" styleClass='#{facesContext.getViewRoot().getViewId().equals("/adminUniversity.xhtml")?"tab homeTabSelected":"tab homeTab"}'/>
<p:commandButton id="adminTopicsId" action="adminTopics.xhtml" value="Admins" ajax="false" styleClass='#{facesContext.getViewRoot().getViewId().equals("/adminTopics.xhtml")?"tab homeTabSelected":"tab homeTab"}'/>
<p:commandButton id="adminRegisterId" action="adminRegister.xhtml" value="Register" ajax="false" styleClass='#{facesContext.getViewRoot().getViewId().equals("/adminRegister.xhtml")?"tab homeTabSelected":"tab homeTab"}'/>
<p:commandButton id="adminReportsId" action="adminReports.xhtml" value="Reports" ajax="false" styleClass='#{facesContext.getViewRoot().getViewId().equals("/adminReports.xhtml")?"tab homeTabSelected":"tab homeTab"}'/>
</h:form>
</p:toolbarGroup>
<p:toolbarGroup styleClass="width_100" align="right">
<p:commandLink value="Welcome: #{facesContext.externalContext.sessionMap['userName']} &nbsp; | &nbsp; sign out" action="#{userlogin.logout()}" styleClass="signOut">sign out</p:commandLink>
</p:toolbarGroup>
</p:toolbar>
<ui:insert name="content">
<ui:include src="/superAdmin.xhtml"/>
</ui:insert>
</div>
<div id="bottom" >
<center>
<hr> </hr>
<br/>
<font size="3" style="font-weight: bold; color:#DA70D6">
(c) Copyright ITShop 2013. All rights reserved.
</font>
</center>
</div>
</h:body>
</html>

وهذ هو كود ال log in and log out

//login and logout method...........
public String login() {
try {

Connection con = Database.getConnection();
Statement stam = con.createStatement();
ResultSet rs = stam.executeQuery("select * from users where username ='" + username + "'");
while (rs.next()) {
user.setName(rs.getString("name"));
user.setUserName(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setAge(rs.getString("age"));
user.setUniversityId(rs.getInt("universityId"));
user.setFacultyId(rs.getInt("facultyId"));
user.setRole(Role.valueOf(rs.getString("role")));
user.setUserClass(rs.getInt("class"));
name = user.getName();
age = user.getAge();
setUser(user);
}
if (user != null & (user.getPassword() == null ? password == null : user.getPassword().equals(password))) {
error = null;

ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
Map<String, Object> session = external.getSessionMap();
session.put("fullName", user.getName());
session.put("userName", username);
session.put("userAge", user.getAge());
session.put("userClass", user.getUserClass());
session.put("userRole", user.getRole());
session.put("userFaculty", getFacultyName(user.getFacultyId()));
session.put("userFacultyId", user.getFacultyId());
if (user.isUser()) {
return "/index.xhtml";
} else {
//return "/superAdmin.xhtml";
return "/adminTemplate.xhtml";
}
}
} catch (Exception e) {
System.out.println("Error In Userlogin.Login() -->" + e.getMessage());
}
error = "invalid username or password";
return "/login.xhtml";
}

// logout method...........

public String logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "login.xhtml?faces-redirect=true";
}

وهذه هى ال filter class

AdminFilter.java

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package 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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*
* @author shokry
*/
public class AdminFilter implements Filter {

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

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

String userRole = req.getSession(true).getAttribute("userRole").toString();
if (!"SUPER".equals(userRole) || userRole==null) {
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect(req.getContextPath() + "/login.xhtml");
return;
}

chain.doFilter(request, response);
}

@Override
public void destroy() {
}
}

وهذا هو ال filter tag فى ال web.xml

<filter>
<filter-name>AdminFilter</filter-name>
<filter-class>filter.AdminFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AdminFilter</filter-name>
<url-pattern>/adminTemplate.xhtml</url-pattern>
<url-pattern>/adminUniversity.xhtml</url-pattern>
<url-pattern>/adminTopics.xhtml</url-pattern>
<url-pattern>/adminRegister.xhtml</url-pattern>
<url-pattern>/adminReports.xhtml</url-pattern>
</filter-mapping>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/login.xhtml</location>
</error-page>

شكرا وارجو الافادة السريعة

"ولله الأسمــــاء الحسنى فادعوه بها"

#2

عند عمل عودة فقد لايعيد المتصفح تحميل الصفحة من جديد، جرّب أن تعمل تحديث للصفحة وانظر هل خرج المستخدم أم لا. لتجاوز مثل هذه المشكلة هي أن تعيد تحويل المستخدم لصفحة أخرى كالصفحة الرئيسية أو الصفحة الحالية مثل /logout?return=/blog/323/ ، إن كانت صفحة تتطلب تسجيل دخول فسيعاد تحويله لصفحة الدخول.

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