下面介绍一个基本的登录验证实践。
1. 自定义一个拦截器(Interceptor)类,实现登录校验,未登录时返回login视图;
2. struts.xml中定义一个全局视图login以便共用,不用在每个action中配置了;
3. 在struts.xml文件中配置自定义的拦截器,并定义一个拦截器栈,其中要包含defaultStack和自定义的拦截器
4. struts.xml中设置自定义的拦截器栈为缺省拦截器栈
5. 为保证所有的访问都被拦截器拦截,要对用户屏蔽jsp页面的直接访问,另外根据MVC模型的要求,JSP作为视图应由控制器选择后推送给用户,而不能由用户直接选择视图,那么所有的jsp页面不应该让用户直接访问,可以放在WEB-INF中;
6. 设置name为*的通用action,即访问abc.action自动转到/WEB-INF/jsp/abc.jsp;可免去对所有页面配置action;
6. 定义网站入口:让首页自动执行index页对应的action;因为welcome-file不能是一个action,所以首页index.jsp要放在网站根目录下的,内容可以是:
<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>
<%@ taglib prefix=”s” uri=”/struts-tags”%>
<s:action name=”index” executeResult=”true”/>
这样的话,访问首页时自动跳转到index.action,需要经过拦截器的校验;但如果index.jsp定义为<jsp:forward page=”/WEB-INF/jsp/index.jsp”/>,那么会跳过拦截器的校验,这是我们不想看到的。