Author: Karel Zikmund
Last Update: 6-th September 2007
Topics:
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-name>/WEB-INF/struts-config.xml</param-name> </init-param> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern></servlet-mapping>
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config></struts-config>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %><html:html><head> <html:base/> <title>Login page</title></head><body><h3>Login</h3><html:form action="Login/Verify" focus="loginName"> <table border="1"> <tbody> <tr> <td>Name:</td> <td><html:text property="loginName" size="12" maxlength="20"/></td> </tr> <tr> <td>Password:</td> <td><html:password property="loginPassword" size="8" maxlength="10"/></td> </tr> <tr> <td colspan="2" valign="center"><html:submit value="Login"/></td> </tr> </tbody> </table></html:form></body></html:html>
<form-beans> <form-bean name="LoginForm" type="com.mycompany.eshop.struts.forms.LoginForm"/></form-beans>
package com.mycompany.eshop.struts.forms;import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionMapping;public class LoginForm extends org.apache.struts.action.ActionForm { private String loginName = null; private String loginPassword = null; public LoginForm() { } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getLoginPassword() { return loginPassword; } public void setLoginPassword(String loginPassword) { this.loginPassword = loginPassword; } public void reset(ActionMapping mapping, HttpServletRequest request) { loginName = null; loginPassword = null; }}
<action-mappings> <action input="/login.jsp" name="LoginForm" path="/Login/Verify" scope="request" type="com.mycompany.eshop.struts.actions.LoginVerifyAction"/></action-mappings>
package com.mycompany.eshop.struts.actions;import com.mycompany.eshop.struts.forms.LoginForm;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.ActionForward;public class LoginVerifyAction extends org.apache.struts.action.Action { private final static String SUCCESS = "success"; public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginForm loginForm = (LoginForm)form; if (com.mycompany.eshop.security.SecurityManager.AuthenticateUser(loginForm.getLoginName(), loginForm.getLoginPassword())) { return mapping.findForward(SUCCESS); } else { return mapping.getInputForward(); } }}
package com.mycompany.eshop.security;public class SecurityManager { /** Authenticates user. Returns true if user's name/password is OK. */ public static boolean AuthenticateUser(String name, String password) { // Business level authentication - simple check of user name/password = admin/admin // TODO: Implement authentication (e.g. use database, etc.) return (name != null) && name.equals("admin") && (password != null) && password.equals("admin"); }}
<action input="/login.jsp" name="LoginForm" path="/Login/Verify" scope="request" type="com.mycompany.eshop.struts.actions.LoginVerifyAction"> <forward name="success" path="/shop.jsp" redirect="true"/></action>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %><html:html><head> <html:base/> <title>Shop page</title></head><body> <h3>Shop</h3> You are logged into e-shop.</body></html:html>
<action input="/login.jsp" name="LoginForm" path="/Login/Verify" scope="session" type="com.mycompany.eshop.struts.actions.LoginVerifyAction">
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %><html:html><head> <html:base/> <title>Logout page</title></head><body><h3>Logout</h3>You are logged out.</body></html:html>
<action forward="/logout.jsp" path="/Logout"/>
<h3>Shop</h3> You are logged into e-shop. + <br> + <html:link action="/Logout" linkName="Log me out" >Logout</html:link> </body> </html:html>
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if ((getLoginName() == null) || (getLoginName().length() == 0)) { ActionMessage newError = new ActionMessage("errors.required", "Login Name"); errors.add("loginName", newError); } if ((getLoginPassword() == null) || (getLoginPassword().length() == 0)) { ActionMessage newError = new ActionMessage("errors.required", "Login Password"); errors.add("loginPassword", newError); } return errors;}
import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionMessage;
# Standard Struts framework properties for error formatting (headers, prefixes, etc.)errors.header=errors.prefix=<span style="color: red">errors.suffix=</span>errors.footer=# Application specific error messageserrors.required={0} is required.
<message-resources parameter="com/mycompany/eshop/struts/ApplicationResource"/>
<tr> <td>Name:</td> <td><html:text property="loginName" size="12" maxlength="20"/></td> + <td><html:errors property="loginName"/></td> </tr> <tr> <td>Password:</td> <td><html:password property="loginPassword" size="8" maxlength="10"/></td> + <td><html:errors property="loginPassword"/></td> </tr>
<h3>Login</h3> + <html:errors property="loginInvalid"/> + <html:form action="Login/Verify" focus="loginName"> <table border="1">
if (com.mycompany.eshop.security.SecurityManager.AuthenticateUser(loginForm.getLoginName(), loginForm.getLoginPassword())) { return mapping.findForward(SUCCESS); } else { + ActionMessages errors = new ActionMessages(); + ActionMessage error = new ActionMessage("errors.login.invalid"); + errors.add("loginInvalid", error); + saveErrors(request.getSession(), errors); + return mapping.getInputForward(); }
import org.apache.struts.action.ActionMessages;import org.apache.struts.action.ActionMessage;
# Application specific error messages errors.required={0} is required. + errors.login.invalid=Invalid login name or password. Try it again.
Project Home Memebership Announcements Discussion Forums Mailing Lists Documentation & Files Version Control Issue Tracker