2010-06-09 8 views
0

J'utilise struts2.1.6 + Spring 2.5 J'ai quatre modules dans mon application.Comment faire l'authentification URL dans struts2

  1. Inscription Module
  2. module d'administration
  3. Citation Module
  4. Emplacement Module.

Dans le module d'enregistrement, le client peut s'enregistrer et seulement après l'enregistrement, il est censé avoir accès aux trois modules restants. Je veux implémenter quelque chose comme si l'action appelée appartient au module d'enregistrement cela fonctionnera normalement mais si l'action appelée appartient au reste de ces trois modules, elle doit d'abord vérifier si l'utilisateur est connecté et la session n'a pas expiré. Si oui, il devrait continuer normalement sinon il devrait rediriger vers la page de connexion. Grâce à la recherche, j'ai découvert que les intercepteurs pouvaient être utilisés à cette fin, mais avant de poursuivre, j'ai pensé qu'il était préférable d'obtenir des commentaires de la part d'experts.

Veuillez suggérer comment cela devrait être fait et, si possible, mettez quelques suggestions de code.

Voici mon struts.xml fichier (Le struts.xml contient quatre fichiers de configuration différents appartenant à chaque module):

<struts> 
    <include file="struts-default.xml" /> 
    <constant name="struts.i18n.reload" value="false" /> 
    <constant name="struts.objectFactory" value="spring" /> 
    <constant name="struts.devMode" value="false" /> 
    <constant name="struts.serve.static.browserCache" value="false" /> 
    <constant name="struts.enable.DynamicMethodInvocation" value="true" /> 
    <constant name="struts.multipart.maxSize" value="10000000" /> 
    <constant name="struts.multipart.saveDir" value="C:/Temporary_image_location" /> 

    <include file="/com/action/mappingFiles/registration_config.xml" /> 
    <include file="/com/action/mappingFiles/admin_config.xml" /> 
    <include file="/com/action/mappingFiles/quote.xml" /> 
    <include file="/com/action/mappingFiles/location_config.xml" /> 

</struts> 

L'échantillon registration_config.xml fichier est:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <package name="registration" extends="struts-default" 
     namespace="/my_company"> 

     <action name="LoginView" class="registration" method="showLoginView"> 
      <result>....</result> 
      <result name="input">...</result> 
     </action> 
     </package> 
</struts> 

L'échantillon fichier admin_config.xml est:

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> 
    <struts> 
     <package name="admin" extends="struts-default" 
      namespace="/my_company"> 

      <action name="viewAdmin" class="admin" method="showAdminView"> 
       <result>....</result> 
       <result name="input">...</result> 
      </action> 
      </package> 
    </struts> 

Le même code existe dans le reste des deux fichiers de configuration struts2 xml. J'ai utilisé le même espace de noms dans tous les quatre fichiers de configuration avec les noms de paquets différents (comme vous pouvez le voir)

Répondre

0

Remarque: la pratique standard consiste à utiliser un espace de noms différent pour chaque package, par ex. "/ my_company/admin" pour le paquet admin, etc.

L'utilisation d'intercepteurs est la bonne approche: elle déconnecte l'authentification des actions elles-mêmes. Vous pouvez définir deux piles d'intercepteurs différentes, l'une nécessitant que l'utilisateur soit connecté et l'autre non. Commencez par copier la pile d'intercepteurs à partir de struts-default.xml, puis personnalisez selon vos besoins. Ces définitions peuvent être placées dans un emballage de base abstraite:

<package name="my-base" abstract="true" extends="struts-default"> 
    <interceptors> 
     <interceptor-stack name="login-required"> 
      <interceptor-ref name="exception"/> 
      <interceptor-ref name="alias"/> 
      <!-- etc --> 
     </interceptor-stack> 
     <interceptor-stack name="login-not-required"> 
      <!-- etc --> 
     </interceptor-stack> 
    </interceptors> 
</package> 

Ensuite, vos autres paquets ont besoin juste pour étendre ce package de base:

<package name="admin" extends="my-base" namespace="/my_company/admin"> 
    <default-interceptor-ref name="login-required"/> 

    <!-- actions defined here --> 
</package> 
+0

Donc, cela signifie que je dois créer un intercepteur personnalisé permet de dire LoginInterceptor et dans le nom de la pile d'intercepteur "login-required" j'ai besoin d'ajouter cet intercepteur. Ai-je raison? –

+0

C'est vrai. Je pense que vous pouvez trouver quelques tutoriels sur le web, par exemple. http://www.vitarara.org/cms/struts_2_cookbook/creating_a_login_interceptor –