В настоящее время я изучаю Struts 2, и в настоящее время я создаю простое приложение, где непроверенные пользователи перенаправляются на форму входа.
У меня есть форма входа и действие, которое принимает учетные данные пользователей, проверяет их и сохраняет объект User в сеансе, но теперь я пытаюсь предотвратить доступ к страницам до того, как логин произошел, и я пытаюсь это сделать с перехватчиком.
Моя проблема в том, что я написал перехватчик, который проверяет, был ли сохранен пользовательский объект в сеансе, но если он не я хочу перенаправить на страницу входа в систему и не могу найти способ сделать это без обхода строк и используя метод HttpServletResponse.sendRedirect
Конфигурация:
<package name="mypackage" extends="struts-default" namespace="/admin">
<interceptors>
<interceptor name="login" class="my.LoginInterceptor" />
</interceptors>
<default-interceptor-ref name="login"/>
<action name="login" class="my.LoginAction">
<result name="input">/admin/login.jsp</result>
<result name="success" type="redirect">/admin</result>
</action>
<action name="private" class="my.PrivateAction">
<result>/admin/private.jsp</result>
</action>
</package>
Код перехватчика:
@Override
public String intercept(ActionInvocation inv) throws Exception {
Map<String, Object> session = inv.getInvocationContext().getSession();
Object user = session.get("user");
if(user == null) {
// redirect to the 'login' action here
}
else {
return inv.invoke();
}
}