Hi there, I'm cuurently replacing JSF RI of Sun By Myfaces. The problem I ran
into is the following: we had subclassed the sun ViewhandlerImpl class and
re-implemented the createview method. Basiccaly this reimplementation
checked the viewid to see wether or not it was pointing to a public or
private section of the webapp. If it pointed to the private section and the
User was not logged in, a view was created for the login page otherwise the
requested page view was created. This worked OK for the sun RI.

For Myfaces I did the same (subclassed JspViewHandlerImpl). The problem here
is that although I call the super.createView(...) for the login page, the
original requested page is created. 

How can I fix this?. Is there another way to solve this problem neatly?

Jan

Here is the subclass code snippet of the overridden method : 


        public UIViewRoot createView(FacesContext fc, String viewId) {
                // The pageUrl is the ViewId, check if it is a public or private
                // page....

                if (viewId.indexOf("jsp/public/") < 0) { // If the page is 
considered
                                                                                
                        // to be private

                        HttpSession session = (HttpSession) 
fc.getExternalContext()
                                        .getSession(true);
                        String userId = (String) 
session.getAttribute("_login_");
                        if (null == userId) {// check if user is logged in....
                                // user is not authenticated yet, see if the 
uid and pwd is
                                // supplied on the request
                                // >>>>>>>>> check if uid and pwd are send alog 
with the request
                                String uid = (String) fc.getExternalContext()
                                                
.getRequestParameterMap().get("uid");
                                String pwd = (String) fc.getExternalContext()
                                                
.getRequestParameterMap().get("pwd");
                                if (uid != null) {
                                        // try to simulate the login using the 
uid and pwd value
                                        LoginManager loginManager = null;
                                        javax.faces.context.FacesContext 
context =
javax.faces.context.FacesContext
                                                        .getCurrentInstance();
                                        javax.faces.application.Application app 
= context
                                                        .getApplication();
                                        javax.faces.el.VariableResolver 
resolver = app
                                                        .getVariableResolver();
                                        Object obj = 
resolver.resolveVariable(context,
                                                        "loginManager");
                                        if (obj != null) {
                                                loginManager = (LoginManager) 
obj;
                                                loginManager.setUserId(uid);
                                                loginManager.setPassword(pwd);
                                                String result = 
loginManager.login();
                                                if 
(result.equals(LoginManager.AUTHENTICATION_OKE)) {
                                                        return 
super.createView(fc, viewId); // send the
                                                                                
                                                        // original
                                                                                
                                                        // requested
                                                                                
                                                        // page
                                                }
                                        }
                                }
                                // if not logged in (or implicit login failed , 
redirect to the
                                // loging page
                                // store the requested page on the session for 
redirect after
                                // succesfull login
                                session.setAttribute(REQUESTED_PAGE, viewId);
                                
session.setAttribute(REQUESTED_PAGE_QUERY_STRING,
                                                ((HttpServletRequest) 
fc.getExternalContext()
                                                                
.getRequest()).getQueryString());
                                return super.createView(fc, LOGIN_PAGE);// 
Redirect to the login
                                                                                
                                // page
                        }
                }

                if (viewId.indexOf("originalRequestedUrl.jsp") >= 0) { // show 
the
                                                                                
                                                // previous
                                                                                
                                                // requested
                                                                                
                                                // page (the one
                                                                                
                                                // before
                                                                                
                                                // redirect to
                                                                                
                                                // login
                        HttpSession session = (HttpSession) 
fc.getExternalContext()
                                        .getSession(true);
                        String originalUrl = (String) 
session.getAttribute(REQUESTED_PAGE);

                        if (originalUrl != null) {
                                // restore original query string
                                Object queryString = session
                                                
.getAttribute(REQUESTED_PAGE_QUERY_STRING);
                                if (queryString != null) {
                                        HttpServletRequest request = 
((HttpServletRequest) fc
                                                        
.getExternalContext().getRequest());
                                        
request.setAttribute(REQUESTED_PAGE_QUERY_STRING,
                                                        queryString);
                                        
session.removeAttribute(REQUESTED_PAGE_QUERY_STRING);
                                }
                        }
                        // if no original url, just show the login page again
                        if (originalUrl == null)
                                originalUrl = LOGIN_PAGE;

                        return super.createView(fc, originalUrl);// Redirect to 
the login
                                                                                
                                // page

                }

                return super.createView(fc, viewId); // send the original 
requested
                                                                                
                // page
        }



--
View this message in context: 
http://www.nabble.com/JspViewHandler--createView-t1741267.html#a4731734
Sent from the MyFaces - Users forum at Nabble.com.

Reply via email to