Użyłem frameworka Struts 2 i utworzyłem aplikację internetową, która ma stronę logowania. Mam trzy różne klasy Action
o nazwach Action1
, Action2
, Action3
i różne widoki stron JSP, które są renderowane przez uruchomienie jakiejś logiki biznesowej w klasach Action
.Struts2 dodając przechwytywacze w pliku struts.xml dla wszystkich klas działania
Teraz chcę sprawdzić, czy użytkownik zalogował się przed przetwarzaniem klasy Action
. Więc stworzyłem przechwytujący poniżej, który działa dobrze.
public String intercept(ActionInvocation invocation) throws Exception
{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
if(session.isNew())
{
response.sendRedirect("Login.action");
}
System.out.println("Interceptor Fired");
String result = invocation.invoke();
return result;
}
Co chcę być w struts.xml
jest zamiast dodawania przechwytywania dla wszystkich działań, takich jak ten poniżej
<interceptor-ref name="newStack"/>
mój plik struts.xml
ma
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="printMsgInterceptor" class="LoginInterceptor"></interceptor>
<interceptor-stack name="newStack">
<interceptor-ref name="printMsgInterceptor"/>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<action name="actone" class="Action1">
<result name="success">/success.jsp</result>
<interceptor-ref name="newStack"/>
</action>
<action name="acttwo" class="Action2">
<result name="success">/success.jsp</result>
<interceptor-ref name="newStack"/>
</action>
<action name="actthree" class="Action3">
<result name="success">/success.jsp</result>
<interceptor-ref name="newStack"/>
</action>
</package>
Dla każdej akcji I chcesz mieć jakąś definicję napisaną w struts.xml
, która uruchamia przechwytywacz zamiast ręcznie dodawać
<interceptor-ref name="newStack"/>
Dzięki za odpowiedź działa gr8 Nie chcę tego przechwytywacza tylko dla jednej strony, która jest stroną logowania, ponieważ powoduje to przekierowanie pętli. Jest tam sposób na uniknięcie przechwytywacza dla jednej konkretnej Action –
Alternatywnie można zdefiniować stos przechwytywania dla konkretnego pakietu i każdego pakietu, który rozciąga się użyje swojego domyślnego stosu.Inne akcje, które nie powinny być przechwytywane (takie jak Login) można zdefiniować w innych pakietach, które nie rozszerzają tego, w którym zdefiniowano domyślny stos przechwytywacza –