zoukankan      html  css  js  c++  java
  • 拦截器 深入理解(动态代理)

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

    拦截器案例

    自定义拦截器

    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;
    }
    }

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

  • 相关阅读:
    go微服务框架kratos学习笔记十(熔断器)
    go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)
    go微服务框架kratos学习笔记八 (kratos的依赖注入)
    go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)
    编译原理之语法分析-自下而上分析(四)
    编译原理之语法分析-自下而上分析(三)
    编译原理之语法分析-自下而上分析(二)
    编译原理之语法分析-自下而上分析(一)
    TreeSet的两种实现方法:Comparable和Comparator(Java比较器)
    JavaWeb学习之JSP(三) EL表达式
  • 原文地址:https://www.cnblogs.com/hualishu/p/7748196.html
Copyright © 2011-2022 走看看