SSH框架学习之旅(三):Struts拦截器

1.拦截器简介

拦截器是Struts一个重要的部分,通过定义一个拦截器可以实现在调用一个action之前或之后执行一些操作。也可以实现将action中的代码重用。

2.实现方法

  • 实现Interceptor接口
  • 继承AbstractInterceptor类

区别:继承的方式包含了init(),destory()方法的空实现。

3.代码

使用拦截器实现一个登录拦截,只有登录的用户才可以请求某些页面,否则返回登录页面。

(1)LoginIntterceptor类

实现拦截功能,包含对拦截到的信息的判断。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

public class LoginInterceptor extends AbstractInterceptor {

private static final long serialVersionUID = 1L;

@Override
public String intercept(ActionInvocation invocation) throws Exception {

Object action = invocation.getAction();
if(action instanceof LoginAction){
System.out.println("login action");
return invocation.invoke();
}

Map session = invocation.getInvocationContext().getSession();
String login = (String) session.get("username");
if(login!=null&&login.length()>0){
System.out.println("has login");
return invocation.invoke();
}else{
System.out.println("not login");
return "globallogin";
}
}

}

(2)Strut.xml的配置

配置拦截器和拦截器栈

1
2
3
4
5
6
7
   <interceptors>
<interceptor name="loginInterceptor" class="com.lee.action.LoginInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>

配置默认拦截器栈

<default-interceptor-ref name="myStack"></default-interceptor-ref>

拦截器代码中用到的全局results

<global-results>
        <result name="globallogin">/WEB-INF/jsp/login.jsp</result>
</global-results>