2013-06-05 23 views
5

için struts.xml içine engelleyici ekleme Struts 2 çerçevesini kullandım ve bir Giriş Sayfası olan bir web uygulaması oluşturdum. , Action2, Action3 adında üç farklı Action sınıfı ve Action sınıflarında bazı iş mantığı çalıştırılarak işlenen JSP sayfaları için farklı görünümlerim var.struts2 tüm eylem sınıfı

Şimdi, kullanıcının, Action sınıfında işlem gerçekleştirmeden önce oturum açıp açmadığını kontrol etmek istiyorum. Bu yüzden, aşağıda iyi çalışan bir engel oluşturdum.

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; 
} 

Ne struts.xml olmak istiyorum yerine

<interceptor-ref name="newStack"/> 

Benim struts.xml dosyasında aşağıdaki gibi tüm eylemler için bir önleme eklemenin her eylem I için

<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> 

sahiptir

el ile eklemek yerine önleyici çalıştırır struts.xml içinde yazılmış bazı tanımını istiyorum Her bir işlem için elle interceptor-ref koyarak Değilse
<interceptor-ref name="newStack"/> 

cevap

12
<interceptor name="test" class="Full path for LoginInterceptor" /> 

    <interceptor-stack name="testStack"> 
     <interceptor-ref name="test"/> 
     <interceptor-ref name="defaultStack"/> //here you are including default stack 
    </interceptor-stack> 

</interceptors> 
<default-interceptor-ref name="testStack"></default-interceptor-ref> 

Şimdi testStack açıkça değil sahip olduğu tüm eylemlerine müdahale etmek default-interceptor-ref kullanabilirsiniz

+0

Teşekkürler için teşekkürler gr8 çalışır Ben bu engelleyiciyi yeniden giriş döngüsüyle sonuçlandığından, Giriş Sayfası olan tek bir sayfa için istemiyorum. Belirli bir eylem için engelleyiciyi önlemenin bir yolu var –

+1

\t \t \t <önleme-ref name = "default" /> \t \t \t .... Alternatif \t \t PSR

+0

belirli bir paket ve bunu genişleten her paket için önleme yığını tanımlayabilirsiniz varsayılan yığını kullanır.Engellenmemesi gereken diğer işlemler (Giriş gibi), öntanımlı varsayılan yığınının tanımlandığı alanı genişletmeyen diğer paketlerde tanımlanabilir. –

5

Kullanım

<default-interceptor-ref name="newStack"/> 

her istek için çalıştırır tanımlı önleyici yapılandırması. Bakınız How do we configure an Interceptor to be used with every Action.

Biz kendi adında yığınlarını oluşturabilir ve hatta durdurucu yukarıdaki çalışıyor söylersek ben olmak için teşvik edecek,

<package name="default" extends="struts-default" > 
    <interceptors> 
     <interceptor-stack name="myStack"> 
      <interceptor-ref name="timer"/> 
      <interceptor-ref name="logger"/> 
     <interceptor-ref name="defaultStack"/> 
     </interceptor-stack> 
    </interceptors> 

Ancak bir paket için yeni bir varsayılan önleme yığını beyan Bir iş mantığı hakkında, ilk çalıştırmada başarısız olursa oturum açma eyleminin yürütülmeyeceği konusunda dikkatli olun. Yeni oturumu kontrol etmek yerine, kimliği doğrulanmış kullanıcının sonuçlarını kontrol etmeli ve bu sonuçları önleyicide kontrol edebileceğiniz oturuma kaydetmelisiniz. example için bu soruya bakın.

Doğrulanmış kullanıcı bilgilerini kullanan oturum açıcıyı here bulabileceğiniz oturumla yazma örneği.

İlgili konular