如何在自定义拦截器中使用应用程序范围变量?

时间:2016-07-25 12:49:44

标签: struts2 el struts2-interceptors

我在访问应用程序映射时得到NullPointerException,因为我已经实现了ApplicationAware接口,所以应该在Interceptor中注入。

public String intercept(ActionInvocation ai) throws Exception {
    String result = "expire";
    app.put("login_msg", "Session Expired");
    Map session = ai.getInvocationContext().getSession();

    try {
        if ((session != null && session.get("login").toString().equalsIgnoreCase("true")) || !app.get("db_name").toString().equals("")) {
        log.info("login hai");
        app.put("login_msg", "");
        result = ai.invoke();
        } else {
            log.error(" LOGIN EXPIRED ");
        }
    } catch (NullPointerException npe) {
        log.error("Error : " + npe);
    }

    log.info("Interceptor Result : " + result);
    return result;
}

@Override
public void setApplication(Map<String, Object> map) {
    app = map;
}

1 个答案:

答案 0 :(得分:2)

ApplicationAware是一个用于将全局地图注入动作的界面,而不是拦截器:

  希望了解应用程序的

操作 Map对象应该实现此接口。这将使他们可以访问Map,在Map中他们可以将应该可用的对象放到应用程序的其他部分。

有多种方法可以实现您想要的,但我很确定它不是您所需要的。为什么要将登录信息放入全局对象?只需写入和阅读会话,这就是您所需要的。