Rediriger vers une autre action dans un intercepteur dans struts 2
Je suis actuellement dans le processus de l'apprentissage Struts 2 et je suis actuellement à la construction d'une application simple où non vérifiées, les utilisateurs sont redirigés vers un formulaire de connexion.
J'ai un formulaire de connexion et d'action fonctionnelle qui prend les informations d'identification des utilisateurs, les vérifie et enregistre un objet Utilisateur dans la session en revanche, je suis maintenant en essayant d'empêcher l'accès à des pages avant que la connexion a eu lieu et je suis en train de le faire avec un intercepteur.
Mon problème est que j'ai écrit un intercepteur qui vérifie si l'Utilisateur de l'objet a été enregistré dans la session, mais si elle n'a pas je veux rediriger vers la page de connexion et ne pouvez pas trouver un moyen de le faire sans en contournant les boudins et à l'aide de la HttpServletResponse.sendRedirect méthode
Configuration:
<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>
L'intercepteur code:
@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();
}
}
source d'informationauteur 3urdoch
Vous devez vous connecter pour publier un commentaire.
Façon standard est de retour spécial du résultat global (par exemple, "connexion") et de définir une cartographie à l'échelle mondiale à partir de ce résultat pour votre
admin/login.jsp
. Donc, vous ne devez ajouter cette ligne:Et dans votre
struts.xml
:BTW, j'ai peur que vous remplacez la valeur par défaut Struts2 intercepteur de la pile avec votre seul intercepteur, normalement, vous voulez ajouter votre intercepteur de la pile. Par exemple:
BTW2: Vous ne devez PAS appliquer la intercepteur à votre de connexion de l'action, bien sûr.
Vous pouvez trouver l'exemple complet de struts2 avec une Connexion personnalisée Intercepteur ici
http://sandeepbhardwaj.github.io/2010/12/01/struts2-with-login-interceptor.html
bon tutoriel.
Si vous avez besoin d'envoyer de redirection, de retourner la valeur null pour éviter ce problème (par exemple la redirection à partir de http://www.domain.com pour domain.com):