[英]How to do URL authentication in struts2
我正在使用struts2.1.6 + Spring 2.5我的應用程序中有四個模塊。
在注冊模塊中,客戶可以注冊自己,只有在注冊后,客戶才可以訪問其余三個模塊。
我要實現一個類似的功能,如果被調用的動作屬於注冊模塊,它將正常運行,但是如果被調用的動作屬於這三個模塊的其余部分,則它首先應檢查用戶是否已登錄並且會話尚未時間到。 如果是,則應正常進行,否則應重定向到登錄頁面。
通過研究,我發現攔截器可以用於此目的,但在繼續之前,我認為最好從專家那里獲得一些反饋。
請建議應該如何做,如果可能,請提出一些代碼建議。
這是我的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.