拦截器 深入理解(动态代理)

---恢复内容开始---

 

拦截器案例

自定义拦截器

 

 

package cn.happy.day07interceptor.action;
import cn.happy.entity.UserInfo;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import java.util.Map;

/**
* Created by Happy on 2017-10-24.
*/
public class LoginAction implements Action {
private UserInfo user;

public String execute() throws Exception {
Map<String, Object> session = ActionContext.getContext().getSession();
if (user!=null) {
if (user.getUsername().equals("1")&&user.getPassword().equals("1")) {
//省略一个步骤,记录session
session.put("uname",user.getUsername());
return SUCCESS;
}else {
return LOGIN;
}
}else {
//不是从页面过来的
if (session!=null&&session.get("uname")!=null) {
return "success";
}else {
System.out.println("Action中的自定义代码");
return "login";
}
}
}

public UserInfo getUser() {
return user;
}

public void setUser(UserInfo user) {
this.user = user;
}
}

 

 

 在拦截器中如果走到login方法便能进入loginaction类去进行一道判断,return success 就返回拦截器的value 视图

不成功则还在login界面 

拦截器三道拦截是互斥的,一个成功就不会走其余的方法。

 

package cn.happy.day07interceptor.interceptor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

import java.util.Map;

/**
* Created by Happy on 2017-10-24.
* 拦截器
*/
public class MyInterceptor implements Interceptor {
public void destroy() {

}

public void init() {
System.out.println("拦截器已经成功初始化.....");
}

public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("对象"+invocation);
//Action是谁
Object action = invocation.getAction();
System.out.println("action============="+action);
String value;
//判定session里面key值对应的value是否存在
Map<String, Object> session = ActionContext.getContext().getSession();
Object name = session.get("uname");
String actionName = invocation.getProxy().getActionName();
invocation.getProxy().getNamespace();//user

System.out.println("actionName======"+actionName);
if (actionName.equals("login")) {
System.out.println("================================Action是Login");
//user/login.action
value= invocation.invoke();
}else if(name!=null) {
//已经登录了,,放行 走login action
value= invocation.invoke();
String method = invocation.getProxy().getMethod();
System.out.println("方法:"+method);
}else{
//走到这个else,证明你访问的Action,既不是登录,也不是被授权访问的操作
value="login";
}
System.out.println("逻辑视图名"+value);
return value;
}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---恢复内容结束---

 

posted @ 2017-10-28 21:41  liuzhe01  阅读(754)  评论(0编辑  收藏  举报