FileDocCategorySizeDatePackage
LogonAction.javaAPI DocExample8389Sun Mar 21 10:32:18 GMT 2004org.apache.struts.webapp.example

LogonAction

public final class LogonAction extends org.apache.struts.action.Action
Implementation of Action that validates a user logon. XDoclet tag to define the action mapping for the struts-config corresponding to this action.
struts.action
path="/logon" name="logonForm" scope="session" input="logon"
struts.action-exception
key="expired.password" type="org.apache.struts.webapp.example.ExpiredPasswordException" path="/changePassword.jsp"
author
Craig R. McClanahan
version
$Revision: 1.14 $ $Date: 2003/01/11 03:08:23 $

Fields Summary
private Log
log
The Log instance for this application.
Constructors Summary
Methods Summary
public org.apache.struts.action.ActionForwardexecute(org.apache.struts.action.ActionMapping mapping, org.apache.struts.action.ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

param
mapping The ActionMapping used to select this instance
param
form The optional ActionForm bean for this request (if any)
param
request The HTTP request we are processing
param
response The HTTP response we are creating
exception
Exception if business logic throws an exception



    // --------------------------------------------------------- Public Methods


                                                                                               
       
				  
				  
				  
	  

	// Extract attributes we will need
	Locale locale = getLocale(request);
	MessageResources messages = getResources(request);
	User user = null;

	// Validate the request parameters specified by the user
	ActionErrors errors = new ActionErrors();
	String username = (String)
            PropertyUtils.getSimpleProperty(form, "username");
        String password = (String)
            PropertyUtils.getSimpleProperty(form, "password");
	UserDatabase database = (UserDatabase)
	  servlet.getServletContext().getAttribute(Constants.DATABASE_KEY);
	if (database == null)
            errors.add(ActionErrors.GLOBAL_ERROR,
                       new ActionError("error.database.missing"));
	else {
	    user = getUser(database, username);
	    if ((user != null) && !user.getPassword().equals(password))
		user = null;
	    if (user == null)
                errors.add(ActionErrors.GLOBAL_ERROR,
                           new ActionError("error.password.mismatch"));
	}

	// Report any errors we have discovered back to the original form
	if (!errors.isEmpty()) {
	    saveErrors(request, errors);
            return (mapping.getInputForward());
	}

	// Save our logged-in user in the session
	HttpSession session = request.getSession();
	session.setAttribute(Constants.USER_KEY, user);
        if (log.isDebugEnabled()) {
            log.debug("LogonAction: User '" + user.getUsername() +
                      "' logged on in session " + session.getId());
        }

        // Remove the obsolete form bean
	if (mapping.getAttribute() != null) {
            if ("request".equals(mapping.getScope()))
                request.removeAttribute(mapping.getAttribute());
            else
                session.removeAttribute(mapping.getAttribute());
        }

	// Forward control to the specified success URI
	return (mapping.findForward("success"));

    
public UsergetUser(UserDatabase database, java.lang.String username)
Look up the user, throwing an exception to simulate business logic rule exceptions.

param
database Database in which to look up the user
param
username Username specified on the logon form
exception
ModuleException if a business logic rule is violated


        // Force an ArithmeticException which can be handled explicitly
        if ("arithmetic".equals(username)) {
            throw new ArithmeticException();
        }

        // Force an application-specific exception which can be handled
        if ("expired".equals(username)) {
            throw new ExpiredPasswordException(username);
        }

        // Look up and return the specified user
        return ((User) database.findUser(username));