Hi,

a few days ago I implemented a login mechanism into my web application.
Therefore I use an abstract BaseAction, that asks the implementing class
wheter it want to be password protected or not. If it does and there's no
object named "user" available the Login.jsp is shown. When the Login form
returns the user object is placed into session scope. 

The Problem is, that after the Login.jsp has returned to the BaseAction all
parameters that were passed to the implementing Action are lost. 

What can I do?

Here' my code:

BaseAction.java
-------------------------------------------------------------------------------
public abstract class BaseAction {

        public static final Integer ALLOWED = 0;
        
        public static final Integer DENIED = 1;
        
        public static final Integer DENIED_GROUP = 2;
                
        
        private String logout = "false";
        
        private String username;
        
        private String password;
        
        protected Log log;
        

        public BaseAction() {}


        public String execute() {
                if(log == null) {
                        log = LogFactory.getLog(getClass());
                }
                        
                Map<String, Object> session = 
ActionContext.getContext().getSession();
                
                /*
                 * if the user wants to logout, delete the object
                 * from session scope.
                 */
                if("true".equals(logout)) {
                        Object userObj = session.get("user");
                        if(userObj != null) {
                                session.put("user", null);
                                log.info("User " + 
((UserAccount)userObj).getName() + " logged out.");
                        }
                } 
                
                /*
                 * in case the username and password values are set, perform 
                 * the login process.
                 */
                if (username != null && password != null) {
                        Session s = 
HibernateUtil.getSessionFactory().openSession();
                        Transaction tx = s.beginTransaction();
                        
                        UserAccount user = 
(UserAccount)s.createCriteria(UserAccount.class)
                                .add(Restrictions.eq("name", username))
                                .uniqueResult();
                                                        
                        tx.commit();
                        s.close();
                        
                        if(user == null) {
                                log.info("Error authenticating user " + 
username);
                                return "loginError";
                        }
                        
                        String dbHash = user.getPasswordhash().toLowerCase();
                        String formHash = MD5Util.md5(password).toLowerCase();
                        
                        if(dbHash.equals(formHash)) {
                                session.put("user", user);      
                                log.info("User " + user.getName() + " logged 
in.");
                        } else {
                                log.info("Password mismatch for user " + 
username);
                                return "loginError";
                        }
                }
                
                /*
                 * If we get this far, userObject is either successfully logged
                 * in or null, so get the UserAccount object or set it null.
                 */
                Object userObject = session.get("user");
                UserAccount user = null;
                if(userObject != null && userObject instanceof UserAccount) {
                        user = (UserAccount)userObject;
                }
                
                /*
                 * Now ask the "real" action if access is allowed.
                 */
                int retVal = isAllowed(user);
                if(retVal == ALLOWED) {
                        return executeAction();
                } else if(retVal == DENIED_GROUP) {
                        return "permissionError";
                } else {
                        return "login";
                }
        }
        
        public abstract String executeAction();

        public abstract Integer isAllowed(UserAccount user);
        
       // getter and setter methods
                        
}
-------------------------------------------------------------------------------

Login.jsp
-------------------------------------------------------------------------------
<html>
<head>
<jsp:include page="/common/Head.jsp"/>
</head>
<body>

<div id="container">
        <jsp:include page="/common/Header.jsp"/>
        
        <div id="navi">
                Main &gt; Login
        </div>
                
        <div id="body">
                <br><br><br><br><br>
                <div style="width: 40%; margin: 0 auto;">
                        This page is protected! Please login:
                        <br><br>
                        <s:form method="post">
                                <s:textfield label="Username" 
name="username"></s:textfield>
                                <s:password label="Password" 
name="password"></s:password>
                                <s:submit></s:submit>
                        </s:form>
                </div>
        </div>
        
        <jsp:include page="/common/Footer.jsp"/>
</div>

</body>
</html>
-------------------------------------------------------------------------------

Is there any chance to have the parameters preserved?


cu
mathias
-- 
View this message in context: 
http://www.nabble.com/Login-mechanism---preserve-Action-parameters-tp24559907p24559907.html
Sent from the Struts - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org

Reply via email to