1 2 1、编写一个类,实现com.opensymphony.xwork2.interceptor.Interceptor 3 2、主要实现public String intercept(ActionInvocation invocation) throws Exception{}方法 4 该方法的返回值就相当于动作的返回值 5 如果调用了String result = invocation.invoke();得到了动作类的返回的值。 6 public String intercept(ActionInvocation invocation) throws Exception { 7 //判断用户是否登录 8 HttpSession session = ServletActionContext.getRequest().getSession(); 9 Object obj = session.getAttribute("user"); 10 if(obj==null){ 11 return "login"; 12 }else{ 13 return invocation.invoke();//调用动作方法 14 } 15 } 16 3、拦截器定义好后,一定要在配置文件中进行注册: 17 <interceptors> 只是定义拦截器,并没有起作用 18 <interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor> 19 </interceptors> 20 4、配置文件中的动作,要通过 21 <interceptor-ref name="permissionInterceptor"></interceptor-ref>使用该拦截器 22 注意:一旦动作中使用了自定义的拦截器,那么默认的就不起作用了。一般应该采用如下的做法: 23 <interceptor-ref name="defaultStack"></interceptor-ref> 24 <interceptor-ref name="permissionInterceptor"></interceptor-ref> 25 26 多个动作类都要使用的话,可以通过package来进行组合。
struts.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" 4 "http://struts.apache.org/dtds/struts-2.1.7.dtd"> 5 <struts> 6 <constant name="struts.devMode" value="true"></constant> 7 <!-- <constant name="struts.ui.theme" value="simple"></constant>--> 8 9 <package name="mydefault" extends="struts-default"> 10 <interceptors> 11 <interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor> 12 <interceptor-stack name="mydefaultstack"> <!-- 集总定义的栈内容 --> 13 <interceptor-ref name="defaultStack"></interceptor-ref> 14 <interceptor-ref name="permissionInterceptor"></interceptor-ref> 15 </interceptor-stack> 16 </interceptors> 17 </package> 18 <package name="user" namespace="/user" extends="mydefault"> 19 <action name="login" class="cn.itcast.domain.User" method="login"> <!--用于处理 login.jsp 中提交的表单,登录的请求--> 20 <result name="success">/</result> 21 <result name="login">/login.jsp</result> 22 </action> 23 <action name="user_*" class="cn.itcast.domain.User" method="{1}"> 24 <interceptor-ref name="mydefaultstack"></interceptor-ref> <!--拦截器 引用--> 25 <result name="success">/listUsers.jsp</result> 26 <result type="redirectAction" name="delOk">user_listUsers</result> 27 <result name="input">/{1}.jsp</result> 28 <result name="saveOk">/success.jsp</result> 29 <result name="editOk">/success.jsp</result> 30 <result name="editUI">/editUser.jsp</result> 31 <result name="showUser">/showUser.jsp</result> 32 <result name="login">/login.jsp</result> <!--让拦截器 找的结果--> 33 </action> 34 <action name="download" class="cn.itcast.domain.User" method="download"> 35 <interceptor-ref name="mydefaultstack"></interceptor-ref> <!-- 方便使用一个 --> 36 <result type="stream" name="success"> 37 <param name="contentType">application/octet-stream</param> 38 <param name="inputStream">inputStream</param><!-- 输入是对应的动作类中的那个字段--> 39 <param name="contentDisposition">attachment;filename=${filename}</param><!-- 要下载的文件名--> 40 </result> 41 <result name="login">/login.jsp</result> 42 </action> 43 </package> 44 </struts>
java文件
1 package cn.itcast.interceptor; 2 3 import javax.servlet.http.HttpSession; 4 5 import org.apache.struts2.ServletActionContext; 6 7 import com.opensymphony.xwork2.ActionInvocation; 8 import com.opensymphony.xwork2.interceptor.Interceptor; 9 10 public class PermissionInterceptor implements Interceptor { 11 12 @Override 13 public void destroy() { 14 15 } 16 17 @Override 18 public void init() { 19 System.out.println("PermissionInterceptor intercept init"); 20 } 21 22 @Override 23 public String intercept(ActionInvocation invocation) throws Exception { 24 System.out.println("PermissionInterceptor intercept "); 25 HttpSession session = ServletActionContext.getRequest().getSession(); 26 Object obj = session.getAttribute("user"); 27 if(obj==null){ 28 return "login"; //返回到 struts.xml中对应的 action下面的result name="longin" 页面 29 }else{ 30 return invocation.invoke(); 31 } 32 } 33 34 }
User.java中的
1 public String login() 2 { 3 User user=service.login(username, password); 4 if(user==null) 5 return LOGIN; 6 else 7 { 8 ServletActionContext.getRequest().getSession().setAttribute("user", user); 9 return SUCCESS; 10 } 11 }