Как использовать переменную области приложения в пользовательском перехватчике?

Я получаю NullPointerException при доступе к карте приложения, которая должна была быть введена в Interceptor, так как я реализовал ApplicationAware интерфейс.

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 ответ

Решение

ApplicationAware - это интерфейс, используемый для введения глобальной карты в действия, а не перехватчики:

Действия, которые хотят знать об объекте приложения Map, должны реализовывать этот интерфейс. Это даст им доступ к карте, где они могут размещать объекты, которые должны быть доступны для других частей приложения.

Есть несколько способов достичь того, чего вы хотите, но я уверен, что это не то, что вам нужно. С какой стати вы помещаете информацию для входа в глобальные объекты? Просто напишите и прочитайте сессию, вот что вам нужно.

Другие вопросы по тегам