بتاريخ: 28 يوليو 201312 سنة comment_238905 السلام عليكم اكنت اريد حلا لهذه المشكلة وهى بتوضيح انى اعمل 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']} | 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> شكرا وارجو الافادة السريعة تقديم بلاغ
بتاريخ: 30 يوليو 201312 سنة comment_238921 أولا: مفيش داعى انك تسجل ال Filter فى ال web.xml وممكن تستبدل الموضوع ده بال annotations عن طريق WebFilter@ وتخصص امتداد الصفحات اللى ال filter حيشتغل عليها بدل كتابتها كلها فى الملف بهذا الشكل ثانيا:مشكلة ال back button فى ال browser انه بعد عمل الlogout بيجيب الصفحة من ال cache والحل لمنع عمل ذلك انك تقول للبراوزر متعملش cache لل pages وابعت ال request لل server لما اضغط على ال back button from browser ولعمل ذلك بمنتهى البساطة حتعمل filter تانى لمنع عمل ال cache والكود بتاعه كالاتى ( وطبعا حيشتغل على صفحات ال xhtml كلها ) package com.filter; import java.io.IOException; import javax.faces.application.ResourceHandler; 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; @WebFilter(urlPatterns = { "*.xhtml" }) public class NoCacheFilter implements Filter { /** * Default constructor. */ public NoCacheFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; if (!req.getRequestURI().startsWith( req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)){ // Skip JSF resources(CSS/JS/Images/etc) res.setHeader("Cache-Control","no-cache, no-store, must-revalidate"); // HTTP 1.1. res.setHeader("Pragma", "no-cache"); // HTTP 1.0. res.setDateHeader("Expires", 0); // Proxies. } chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } } تقديم بلاغ
بتاريخ: 31 يوليو 201312 سنة كاتب الموضوع comment_238950 اشتغلت ولكن بيظهرلى هذا ال error فى ال browser Error code: ERR_CACHE_MISS وانا اريده ان يرجع لل login page تقديم بلاغ
بتاريخ: 2 أغسطس 201312 سنة comment_238970 الرسالة بتتغيرطبقا للمتصفح يعنى على ال firefox بيديك Document Expired وعلى chrome بتديك Confirm Form Resubmission اعمل refresh او reload للمتصفح وحيوديك للوجين على طول تقديم بلاغ
بتاريخ: 16 أغسطس 201312 سنة comment_239221 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); ماذا تمثل هنا كلمة user وكلمة name وكلمة age تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.