关于自定义拦截器配置,及拦截器的作用范围
关于自定义拦截器配置
1.步骤一、在WebRoot根目录下WEB-INF创建一个名称为myinter的文件夹,里面有三个文件
1.在struts.xml首先配置一个默认的action节点
步骤二:在login.xml配置文件的action节点
步骤三:创建一个名称为loginAction的类
1 package cn.jbit.action; 2 3 import java.util.Map; 4 5 import cn.jbit.entity.User; 6 7 8 import com.opensymphony.xwork2.ActionContext; 9 import com.opensymphony.xwork2.ActionSupport; 10 import com.opensymphony.xwork2.ModelDriven; 11 12 public class loginAction extends ActionSupport implements ModelDriven<User>{ 13 14 private User user=new User(); 15 16 @Override 17 public String execute() throws Exception { 18 Map<String, Object> map = ActionContext.getContext().getSession(); 19 if(user!=null){//说明用户已登录 20 if(user.getName().equals("1")&&user.getPassword().equals("1")){ 21 map.put("uname", user.getName()); 22 return SUCCESS; 23 }else{ 24 return LOGIN; 25 } 26 }else{//用户直接通过url请求到 27 if(map!=null&&map.get("uname")!=null){ 28 return "success"; 29 }else{ 30 return "login"; 31 } 32 } 33 } 34 35 36 37 38 39 40 41 public User getUser() { 42 return user; 43 } 44 public void setUser(User user) { 45 this.user = user; 46 } 47 48 49 50 public User getModel() { 51 // TODO Auto-generated method stub 52 return user; 53 } 54 55 56 57 58 }
在list.xml中配置
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <constant name="struts.devMode" value="true"></constant> 7 <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> 8 <package name="list" namespace="/" extends="struts-default"> 9 10 <action name="list" class="cn.jbit.action.ViewAction"> 11 <result name="success">/WEB-INF/myinter/list.jsp</result> 12 <result name="login">/WEB-INF/myinter/login.jsp</result> 13 </action> 14 15 </package> 16 17 </struts>
ViewAction
1 package cn.jbit.action; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class ViewAction extends ActionSupport{ 6 7 @Override 8 public String execute() throws Exception { 9 10 return SUCCESS; 11 } 12 13 }
步骤四:设置自己的Interceptor进行拦截
1 package cn.jbit.intercepter; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 7 8 import com.opensymphony.xwork2.ActionContext; 9 import com.opensymphony.xwork2.ActionInvocation; 10 import com.opensymphony.xwork2.interceptor.Interceptor; 11 12 13 14 public class MyTimerIntercepter implements Interceptor{ 15 16 17 //进行拦截操作 18 public String intercept(ActionInvocation invocation) throws Exception { 19 System.out.println("hmy=============intercepter"); 20 Map<String, Object> map = ActionContext.getContext().getSession(); 21 Object uname=map.get("uname"); 22 String value; 23 String actionName=invocation.getProxy().getActionName(); 24 System.out.println(actionName); 25 26 if(actionName.equals("login")){ 27 value=invocation.invoke(); 28 }else if(uname!=null){ 29 //已经登陆了 30 value=invocation.invoke(); 31 String method=invocation.getProxy().getMethod(); 32 System.out.println("方法:"+method); 33 }else{ 34 value="login"; 35 } 36 System.out.println("逻辑视图名:"+value); 37 return value; 38 } 39 40 public void destroy() { 41 System.out.println("hmy-destory"); 42 } 43 44 public void init() { 45 System.out.println("hmy=init"); 46 } 47 48 49 50 51 52 }
上述方式定义的拦截器,只适用于在login.xml文件的action节点的类中具有拦截作用,那么我们如何将拦截器提升为全局的呢,这就需要我们去继承我们自定义的包
我们只需要修改三个xml文件即可
1.struts.xml文件
2.login.xml文件
3.list.xml文件
这样我们就可以通过控制台上打印的信息判断是否都可以去走我们自定义的拦截器