Бесплатный обзор кода.
1) Результат перехвата объявлен как переменная, не используется.
2) В любом случае указанное значение должно быть постоянным.
3) Переменная названа неправильно - это не имя действия, это имя результата.
4) Если вы находитесь в перехватчике, вы получили запрос - просто невозможно, чтобы это значение было нулевым. Если равно ноль, произошло нечто гораздо более серьезное, чем неавторизованный пользователь, и мир должен взорваться.
5) Аналогичным образом, если вы специально не настроили все приложение, чтобы оно не создавало сеансы, проверка на сеанс является излишней. Если нет, то что-то пошло не так. Проверьте наличие известных атрибутов сеанса, чтобы определить, вошел ли пользователь в систему, а не на наличие самого сеанса - гораздо проще.
IMO и 4 и 5 , если обрабатываются вообще, должны обрабатываться с декларативными исключениями. В этом состоянии веб-приложение, скорее всего, не работает - подключите пользователя к HTTP 500 или аналогичному.
6) Вложенные условия way слишком глубоки. Строгое следование принципу «один возврат на метод» создает сложный для понимания код, особенно когда метод имеет глубоко вложенные условные выражения.
7) Это выглядит , как будто вы полагаетесь на данные формы для определения роли пользователя. Это по сути небезопасно; Информация о роли пользователя должна храниться в сеансе, где ее нелегко манипулировать.
8) Некоторые различные хитрости оставляют нас с этим:
public class FooInterceptor {
private static final String UNAUTHORIZED_USER = "unauth.user";
public String intercept(ActionInvocation actionInvocation) throws Exception {
ActionContext context = actionInvocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) context.get(StrutsStatics.HTTP_REQUEST);
if (request == null) {
return UNAUTHORIZED_USER;
}
HttpSession session = request.getSession(false);
if (session == null) {
return UNAUTHORIZED_USER;
}
Long requestedRole = getRequestedRole(request);
if (requestedRole == null) {
return UNAUTHORIZED_USER;
}
UserInfoUIForm userForm = (UserInfoUIForm) session.getAttribute(WebConstants.USER_INFO);
if (userForm == null) {
return UNAUTHORIZED_USER;
}
List<Long> userRoles = FCCommonUtils.getmenuids(userForm.getRoleId());
return userRoles.contains(requestedRole) ? ActionSupport.SUCCESS : UNAUTHORIZED_USER;
}
private Long getRequestedRole(HttpServletRequest request) {
String contextPath = request.getContextPath() + RequestURIDtls.SEPARATOR;
String reqURI = request.getRequestURI().substring(contextPath.length(), request.getRequestURI().length());
try {
return Long.valueOf(FCCommonUtils.getALLMenuIdMap().get(reqURI));
} catch (NumberFormatException e) {
return null;
}
}
}
Хотя тестирование метода остается относительно сложным, гораздо проще понять точные потребности тестирования. Это легче читать, потому что вам больше не нужно задумываться "а что, если все наоборот?" как в глубоко вложенном коде.