दिलचस्प पोस्ट
Enum विशेषता से enum प्राप्त करें जावा स्मृति समझाया (एसयूएन जेवीएम) मैं उपयोगकर्ता नियंत्रण में एक घटना कैसे बना सकता हूं और इसे मुख्य प्रपत्र में हैंडल किया है? Log4j के साथ विभिन्न सामग्री की एकाधिक लॉग फाइल बनाना @ ट्रेडैजनिकल एनोटेशन कहां से संबंधित है? जेएसएफ, हाई चार्ट्स और जेएस बैश बैकल्टी के बैच समकक्ष आर में, किसी फ़ंक्शन पर भेजे जाने के बाद ऑब्जेक्ट का नाम कैसे प्राप्त करें? event.returnValue नापसंद है इसके बजाय मानक event.preventDefault () का उपयोग करें ggplot2: एक साजिश छँटाई UIImageWriteToSavedPhotosAlbum गलत आकार और गुणवत्ता के लिए बचाता है ViewPager में एक टुकड़े को दूसरे के साथ बदलें प्रत्येक फ़ील्ड / कुंजी के अनुसार अलग-अलग मानों का मोजोंगब गणक संख्या क्यों उपयोग कर रहे हैं (! $ दायरा। $ $ चरण) $ दायरा। $ लागू () एक विरोधी-पैटर्न? जीसीसी: – स्टार्ट-समूह और -एंड-समूह कमांड लाइन विकल्प क्या हैं?

JSF HTTP सत्र लॉगिन

मैं वेब अनुप्रयोग में लॉगिन फ़ॉर्म बनाने का प्रयास करता हूं। जेएसपी पृष्ठ में मैं उपयोग कर सकते हैं

<% String name = request.getParameter( "username" ); session.setAttribute( "theName", name ); %> 

लेकिन अब मैं वेब अनुप्रयोग के लिए JSF / Facelets का उपयोग कर रहा हूं मुझे नहीं पता है कि ग्राहक के लिए जेएसएफ बैकिंग बीन में सत्र बनाने के बारे में कैसे पता करें और अगर उपयोगकर्ता लॉग इन हो या नहीं, तो यह लॉगिन पेज में रीडायरेक्ट हो जाएगा। जो मुझे इस समस्या के लिए मुझे ट्यूटोरियल लिंक करने में मदद कर सकता है? पहले धन्यवाद

अब मुझे वेब फ़िल्टर में मानचित्रण करने में बहुत कम समस्या है

 @Override public void init(FilterConfig filterConfig) throws ServletException { this.config = filterConfig; } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; LoginController controller = (LoginController) req.getSession() .getAttribute("loginController"); if (controller == null || !controller.isLoggedIn()) { res.sendRedirect("../admin/login.xhtml"); } else { chain.doFilter(request, response); } } 

और web.xml मैं <fitler> टैग के साथ मानचित्र करता हूं

 <filter> <filter-name>userLoginFilter</filter-name> <filter-class>com.mcgraw.controller.UserLoginFilter</filter-class> <init-param> <param-name>loginPage</param-name> <param-value>/login.xhtml</param-value> </init-param> </filter> <filter-mapping> <filter-name>userLoginFilter</filter-name> <url-pattern>/admin/*</url-pattern> </filter-mapping> 

मेरे पास वेब प्रोजेक्ट में एक फ़ोल्डर व्यवस्थापक है और मैं जांचता हूं कि उपयोगकर्ता पृष्ठ पर प्रवेश नहीं करने के लिए व्यवस्थापक की अनुमति से लॉग इन नहीं है (मैं अनुमति जांच कर सकता हूं), लेकिन जब मैं फ़िल्टर का उपयोग करता हूं तो ब्राउज़र यूआरएल को समझ नहीं पा रहा है ?? कोई स्टैकट्रेस नहीं दिखाता है, जब ब्राउज़र यूआरएल को समझता नहीं है

फ़ायरफ़ॉक्स पर दिखाए गए त्रुटि

 The page isn't redirecting properly 

IE पर यह लोड हो रहा है … लोड हो रहा है। .. बिना रुके

अब मैं शर्त बदलता हूं जो जांचती है कि क्या req.getPathInfo.startsWith ("/ login.xhtml") यह श्रृंखला करता है

मेरे पास 2 विचार हैं लेकिन यह 500 HTTP प्रतिक्रियाओं का उत्तर देता है

  if (controller == null || !controller.isLoggedIn()) { res.sendRedirect("../admin/login.xhtml"); if(req.getPathInfo().startsWith("/login.xhtml")){ chain.doFilter(request, response); } } else { chain.doFilter(request, response); } 

===============

 if (controller == null || !controller.isLoggedIn()) { if (!req.getPathInfo().startsWith("/login.xhtml")) { res.sendRedirect("../admin/login.xhtml"); } else { chain.doFilter(request, response); } } else { chain.doFilter(request, response); } 

====================== कक्षा लॉगिन नियंत्रक को अपडेट करें

 package com.mcgraw.controller; import com.DAO.UserBean; import com.entity.IUser; import java.io.Serializable; import javax.ejb.EJB; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; /** * @author Kency */ @ManagedBean @SessionScoped public class LoginController implements Serializable { @EJB private UserBean userBean; private IUser user; private boolean admin; private boolean mod; private PasswordService md5; /** Creates a new instance of LoginController */ public LoginController() { user = new IUser(); md5 = new PasswordService(); } // getter / setter public boolean isMod() { return mod; } public void setMod(boolean mod) { this.mod = mod; } public IUser getUser() { return user; } public void setUser(IUser user) { this.user = user; } public boolean isAdmin() { return admin; } public void setAdmin(boolean admin) { this.admin = admin; } public String cplogin() { String md5Password = md5.md5Password(user.getPassword()); if (userBean.userLogin(user.getUsername(), md5Password) != null) { if (user.getUsername() != null || md5Password != null) { user = userBean.userLogin(user.getUsername(), md5Password); if (user.getGroups().getAdmin() != null) { setAdmin(user.getGroups().getAdmin()); } if (user.getGroups().getMods() != null) { setMod(user.getGroups().getMods()); } if (isAdmin() == true || isMod() == true) { return "home"; } else { return "login"; } } else { return "login"; } } else { return "login"; } } public String logout() { user = null; return "login"; } public boolean isLoggedIn() { return user != null; } } 

मुझे लॉग-इन विधि के साथ जेएसएफ़ टैगलिबेंड प्रदान करने की नई समस्या है, तो इंडेक्स पेज में (व्यवस्थापक फ़ोल्डर में नहीं) उपयोगकर्ता लॉगिन नहीं देख सकता है कि मैं किस प्रकार उदाहरण देता हूं, <== यह पसंद है अगर उपयोगकर्ता लॉगिन नहीं करता है तो उपयोगकर्ता नहीं देख सकता है लेकिन वह क्यों देख सकता है?

Solutions Collecting From Web of "JSF HTTP सत्र लॉगिन"

आप JSF में / ExternalContext#getSessionMap() माध्यम से HTTP सत्र विशेषताएँ प्राप्त कर सकते हैं जो कि मूल रूप से एचटीटीपी सत्र ExternalContext#getSessionMap() मिल / सेट एट्रिब्यूट ExternalContext#getSessionMap() आस-पास एक आवरण है।

 @ManagedBean @RequestScoped public class LoginController { private String username; private String password; @EJB private UserService userService; public String login() { User user = userService.find(username, password); FacesContext context = FacesContext.getCurrentInstance(); if (user == null) { context.addMessage(null, new FacesMessage("Unknown login, try again")); username = null; password = null; return null; } else { context.getExternalContext().getSessionMap().put("user", user); return "userhome?faces-redirect=true"; } } public String logout() { FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); return "index?faces-redirect=true"; } // ... } 

फेसलेट पेज में, बस इस सेम में username और password इनपुट फ़ील्ड को बाँध लें और login() अनुसार login() कार्रवाई करें।

 <h:form> <h:inputText value="#{loginController.username}" /> <h:inputSecret value="#{loginController.password}" /> <h:commandButton value="login" action="#{loginController.login}" /> </h:form> 

सत्र विशेषताएँ EL में सीधे पहुंच योग्य हैं नाम user साथ एक सत्र विशेषता ईएल में है जो कि #{user} रूप में उपलब्ध है। परीक्षण करते समय उपयोगकर्ता कुछ rendered विशेषता में लॉग इन होता है, बस जांचें कि क्या यह empty या नहीं

 <h:panelGroup rendered="#{not empty user}"> <p>Welcome, #{user.fullName}</p> <h:form> <h:commandButton value="logout" action="#{loginController.logout}" /> </h:form> </h:panelGroup> 

लॉगआउट कार्रवाई मूल रूप से सत्र को केवल ट्रैश करता है


आने वाले अनुरोध की जांच के लिए यदि कोई उपयोगकर्ता लॉग इन होता है या नहीं, तो बस एक Filter बनाएं जो लगभग doFilter() विधि में निम्न करता है:

 @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; HttpSession session = request.getSession(false); String loginURI = request.getContextPath() + "/login.xhtml"; boolean loggedIn = session != null && session.getAttribute("user") != null; boolean loginRequest = request.getRequestURI().equals(loginURI); boolean resourceRequest = request.getRequestURI().startsWith(request.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER); if (loggedIn || loginRequest || resourceRequest) { chain.doFilter(request, response); } else { response.sendRedirect(loginURI); } } 

प्रतिबंधित पृष्ठों को कवर करने वाले url-pattern पर इसे नक्शा करें, जैसे /secured/* , /app/* , आदि।

यह भी देखें:

  • डेटाबेस में उपयोगकर्ताओं के साथ प्रमाणीकरण / प्राधिकरण कैसे संभालना है?
  • सत्र की समाप्ति पर प्राधिकरण का पुनर्निर्देशन JSF फ़ॉर्म सबमिट करने पर काम नहीं करता, तो पृष्ठ एक ही रहता है

अनुरोध प्राप्त होने पर इसे अपने बैकिंग बीन में आज़माएं (जैसे कि किसी क्रिया विधि में):

 HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); HttpSession session = request.getSession(); 

उसके बाद आप अनुरोध और सत्र ऑब्जेक्ट्स के साथ काम कर सकते हैं जैसे आप जेएसपी के साथ करते थे, एट्रिब्यूट्स सेट करते थे और इसी तरह।

आप सबलेट फ़िल्टर में क्लाइंट सत्र की जांच के बारे में मेरे संबंधित प्रश्न पर भी नज़र डाल सकते हैं। आप अपने एचटीटीपी सत्र में यूज़र लॉगइन के लिए एक समान फिल्टर लिख सकते हैं और फिर अगर आवश्यक हो तो अपने लॉगिन पृष्ठ पर एक रीडायरेक्ट (या रिक्वेस्ट डिस्पेच) कर सकते हैं।