转载自:http://www.mathapply.cn/Applys/showpaper/pid/227#0-qzone-1-48969-d020d2d2a4e8d1a374a433f596ad1440
通常一个网站有很多资源是需要登录后才能访问的,因此需要在用户访问Action时判定是否用户登录了,如果在每一个Action里去写判定比较麻烦。在Struts2中很方面的用拦截器实现。
首先定义一个类
public class AuthorityInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception
{
ActionContext ctx = invocation.getInvocationContext();
Map<String,Object> session = ctx.getSession();
Object object = session.get("USER_ID"); //登录后在session中存入 USER_ID
String name = ctx.getName();
if(object != null || name.equals("Admin_Login")){ //session存在用户已经登录,用户访问的是登录的Action,都放行
return invocation.invoke();
}else{
return Action.LOGIN; // 否则返回登录页面
}
}
}
Struts.xml文件中,定义拦截器如下。
<package name="Admin_actions" namespace="/" extends="struts-default">
<!-- 定义一个拦截器 -->
<interceptors>
<interceptor name="authority"
class="yycx.action.AuthorityInterceptor">
</interceptor>
<!-- 拦截器栈 -->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/Admin/login.html</result>
</global-results>
<action name="Admin_*" class="yycx.action.AdminAction" method="{1}">
<result name="loginsuc">/Admin/main.jsp</result>
<result name="loginfail">/Admin/loginFail.jsp</result>
<interceptor-ref name="mydefault" /> // 对该Action进行拦截处理
</action>
</package>
实现这几部就可以进行登录判定了,是不是很方便啊?