gpt4 book ai didi

struts2 - 拦截器阻止将 URL 参数传递给操作

转载 作者:行者123 更新时间:2023-12-01 12:50:34 25 4
gpt4 key购买 nike

我有一个 LoginInterceptor,它在大多数操作之前运行并检查成员是否已登录。如果是,则显示页面,否则重定向到登录页面。

但是我刚刚注意到拦截器“阻止”了所有 URL 参数。基本上,如果在操作之前有拦截器,则不会将此操作的 URL 参数传递给 setter 。

这是我的拦截器:

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() 调用了操作,但没有参数。

我该怎么办?

更新:

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

最佳答案

如果你的拦截器栈不包含params拦截器,那么就会出现这个问题。您应该按照以下方式配置您的堆栈:

       <interceptors>
<interceptor name="loginInterceptor" class="community.interceptor.LoginInterceptor" />
<interceptor-stack name="customDefaultStack">
<interceptor-ref name="i18n"/>
<interceptor-ref name="loginInterceptor"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>

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

或者,您可以扩展开箱即用的堆栈:

       <interceptors>
<interceptor name="loginInterceptor" class="community.interceptor.LoginInterceptor" />
<interceptor-stack name="customDefaultStack">
<interceptor-ref name="loginInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>

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

关于struts2 - 拦截器阻止将 URL 参数传递给操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13128071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com