2
我有一個在大多數操作之前運行的LoginInterceptor,並檢查成員是否登錄。如果是,則顯示該頁面,否則將重定向到登錄頁面。攔截器可以防止將URL參數傳遞給動作
但是我只注意到攔截器「阻塞」了所有的URL參數。基本上,如果操作前有攔截器,則此操作的URL參數不會傳遞給設置者。
這是我的攔截器:
public class LoginInterceptor extends AbstractInterceptor {
public String intercept(final ActionInvocation invocation) throws Exception {
final String REDIR = "loginRedirect";
AuthenticationService auth = new AuthenticationService();
if (auth.isMemberLoggedIn()) {
return invocation.invoke();
} else {
return REDIR;
}
}
}
我懷疑invocation.invoke()
調用動作,但沒有參數。
我能做些什麼呢?
UPDATE:
AuthenticationService.isMemberLoggedIn()
public boolean isMemberLoggedIn() {
Map<String, Object> session = ActionContext.getContext().getSession();
String username = (String) session.get("username");
if (username != null) {
return true;
} else {
return false;
}
}
struts.xml中
<package name="global" extends="struts-default">
<interceptors>
<interceptor name="loginInterceptor" class="community.interceptor.LoginInterceptor" />
</interceptors>
<global-results>
<result name="loginRedirect" type="redirect">/members/login</result>
</global-results>
</package>
然後,每個包延伸global
和我調用它們在每個操作:
<interceptor-ref name="loginInterceptor" />
有什麼不妥這裏。你可以分享你的'auth.isMemberLoggedIn()'代碼嗎?另外,要清楚的是,你的問題不是參數在重定向發生時沒有消失,而是在調用動作時它們消失了,是正確的? – rees
這是正確的。我沒有看到需要分享'isMemberLoggedIn()'函數的內容。它工作正常。這就是如果測試通過並且'invocation.invoke()'被稱爲參數「消失」。 – Eleeist
我問過查看它的內容,因爲我認爲它以某種方式訪問HttpServletRequest,在這種情況下,如果不正確,它可能是罪魁禍首。但是,如果你確定,那就不要包括它。但是,你可以在struts.xml中包含你的攔截器堆棧配置嗎? 「params」攔截器沒有被意外包含在堆棧中,也可能發生缺失的參數。 – rees