Как использовать переменную области приложения в пользовательском перехватчике?
Я получаю 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, должны реализовывать этот интерфейс. Это даст им доступ к карте, где они могут размещать объекты, которые должны быть доступны для других частей приложения.
Есть несколько способов достичь того, чего вы хотите, но я уверен, что это не то, что вам нужно. С какой стати вы помещаете информацию для входа в глобальные объекты? Просто напишите и прочитайте сессию, вот что вам нужно.