1、编写实现拦截验证的类
package iterceptor;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class AuthorityInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
// 拦截Action处理的拦截方法
public String intercept(ActionInvocation invocation) throws Exception {
// 取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
// 取出名为user的Session属性
String user = (String) session.get("username");
// try{
// System.out.println("得到的用户名是: "+user);
// }catch(Exception ex){
// System.out.println("异常: "+ex.toString());
// }
// 如果没有登陆,或者登陆所用的用户名不是scott,都返回重新登陆
if (user != null && user.equals("weiqingli")) {
return invocation.invoke();
}
// 没有登陆,将服务器提示设置成一个HttpServletRequest属性
ctx.put("tip", "您还没有登陆,请输入scott,tiger登陆系统");
// 直接返回login的逻辑视图
return Action.LOGIN;
}
}
2、在struts.xm 配置
<!-- 用户拦截器定义在该元素下 -->
<interceptors>
<!-- 定义了一个名为checkUserLogin的拦截器 -->
<interceptor name="checkUserLogin" class="iterceptor.AuthorityInterceptor"/>
<!--为了在action里面的方便引用,做成拦截器堆栈 -->
<interceptor-stack name="checkUserLogin_stack">
<!-- 应用默认拦截器堆栈 一定要有 -->
<interceptor-ref name="defaultStack" />
<!-- 应用自定义拦截器 -->
<interceptor-ref name="checkUserLogin" />
</interceptor-stack>
</interceptors>
3、在需要验证身份的action里,使用拦截器
<!-- 需要登录权限的页面 -->
<action name="main" class="com.qili.Main" method="main">
<!-- 使用自定义拦截器 -->
<interceptor-ref name="checkUserLogin_stack"></interceptor-ref>
<result name="success" type="freemarker">/ftl/main.html</result>
</action>
4、配全局结果,结果为 login的转正,都指向登录页
<global-results>
<result name="login" type="redirect">login.jsp</result>
</global-results>
5、实现下载