簡體   English   中英

如何在Struts2中進行URL身份驗證

[英]How to do URL authentication in struts2

我正在使用struts2.1.6 + Spring 2.5我的應用程序中有四個模塊。

  1. 注冊模塊
  2. 管理模塊
  3. 報價模塊
  4. 定位模塊。

在注冊模塊中,客戶可以注冊自己,只有在注冊后,客戶才可以訪問其余三個模塊。

我要實現一個類似的功能,如果被調用的動作屬於注冊模塊,它將正常運行,但是如果被調用的動作屬於這三個模塊的其余部分,則它首先應檢查用戶是否已登錄並且會話尚未時間到。 如果是,則應正常進行,否則應重定向到登錄頁面。

通過研究,我發現攔截器可以用於此目的,但在繼續之前,我認為最好從專家那里獲得一些反饋。

請建議應該如何做,如果可能,請提出一些代碼建議。

這是我的struts.xml文件(struts.xml包含屬於每個模塊的四個不同的配置文件):

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

示例的registration_config.xml文件是:

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

樣本admin_config.xml文件為:

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

在兩個struts2 xml配置文件的其余部分中,存在相同的代碼。 我在所有四個配置文件中都使用了相同的名稱空間,並且使用了不同的包名稱(如您所見)

注意:標准做法是為每個軟件包使用不同的名稱空間,例如,“ / my_company / admin”用於管理軟件包等。

使用攔截器是正確的方法:它將身份驗證與操作本身脫鈎。 您可以定義兩種不同的攔截器堆棧,一種需要用戶登錄,另一種則不需要。 首先從struts-default.xml復制攔截器堆棧,然后根據需要進行自定義。 這些定義可以放在抽象的基本包中:

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

然后您的其他軟件包只需要擴展此基本軟件包:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM