Java 如何在Struts2中加载页面之前执行操作?
我得到了一个JavaWebApp项目,它使用Struts2作为控制器层。我需要检查用户的权限,然后再做任何事情,如打开网页。我开发了一个需要在struts操作中执行的授权系统。那么,如何在加载页面之前执行此操作呢?我应该使用拦截器吗?当然,您应该实现自己的拦截器,并将其放在其他拦截器的顶部,而不一定放在顶部。如果你把它放在上面,它会在你的页面执行之前工作,并且可以改变你的返回值 例如: 在struts.xml中Java 如何在Struts2中加载页面之前执行操作?,java,struts2,interceptor,Java,Struts2,Interceptor,我得到了一个JavaWebApp项目,它使用Struts2作为控制器层。我需要检查用户的权限,然后再做任何事情,如打开网页。我开发了一个需要在struts操作中执行的授权系统。那么,如何在加载页面之前执行此操作呢?我应该使用拦截器吗?当然,您应该实现自己的拦截器,并将其放在其他拦截器的顶部,而不一定放在顶部。如果你把它放在上面,它会在你的页面执行之前工作,并且可以改变你的返回值 例如: 在struts.xml中 <interceptor name="security" class=
<interceptor name="security"
class="com.solekia.common.SecurityInterceptor">
</interceptor>
<interceptor-stack name="defaultStack">
<interceptor-ref name="security"/>
<interceptor-ref name="exception" />
...
</interceptor-stack>
<global-results>
<result name="login" type="redirectAction">Login</result>
<result name="adminlogin" type="redirectAction">AdminLogin</result>
<result name="error">/error.jsp</result>
</global-results>
希望这有助于您理解Struts等MVC框架的全部要点。在MVC应用程序中,您不应该有任何指向JSP的链接或表单 您应该始终指向映射到Struts servlet/filter的URL。然后servlet根据URL调用适当的操作,该操作返回JSP要转到的结果,并将Struts转发到此JSP
如果直接指向JSP,则完全绕过了Struts。阅读我不明白你的问题。如果必须在Struts操作中执行,则在Struts操作中执行。问题是什么?看,问题是我想在加载特定页面的任何内容之前执行操作。这可能是一个场景:1-用户进入www.app.com/admin.jsp 2-应该在操作中检查权限3-如果授权,则加载页面,否则会显示错误。@SJ.Jafari:如果您想要实现授权系统,请使用授权框架,如spring security/JAAS等。我想您得到了我:D,实际上,我知道MVC框架的全部要点。问题是,除了使用struts作为表单的控制器外,我没有想到将它们用于链接。无论如何,谢谢你,我得到了我的答案。如果你没有使用struts2约定插件,我强烈建议你看看它。您将应用一个拦截器,它将强制某个文件夹中的所有jsp都将使用它。那么您就不需要任何xml,也不需要一点xml来定义拦截器堆栈。关键是你只需要创建链接而不需要担心动作映射,约定就可以了。谢谢你的回答,但是我犯了一个根本性的错误,直接指向链接。
public class SecurityInterceptor extends AbstractInterceptor
{
public static final String CURRENT_USER = "current_user";
public static final String LOGIN = "login";
public static final String ADMINLOGIN = "adminlogin";
public String intercept(ActionInvocation invocation) throws Exception {
Object user = invocation.getInvocationContext().getSession().get(CURRENT_USER);
Object action = invocation.getAction();
if(action instanceof Login)
{
return invocation.invoke();
}
else if(action instanceof Register)
{
return invocation.invoke();
}
else if(action instanceof Pro)
{
return invocation.invoke();
}
if( user == null )
{
invocation.getInvocationContext().getSession().clear();
return LOGIN;
}
else
{
if(user instanceof User)
{
if(action instanceof AdminLogin)
return ADMINLOGIN;
}
if(user instanceof Admin)
{
if(action instanceof ClientPortal)
return LOGIN;
}
synchronized(user)
{
return invokeLocal(invocation) ;
}
}
}
protected String invokeLocal(ActionInvocation invocation) throws Exception
{
return invocation.invoke();
}
}