1.在struts.xml中配置一个默认的拦截器,用于权限拦截。具体代码如下:
<interceptors>
<interceptor name="authority" class="en.estar.utils.AuthorityInterceptor"/>
<interceptor-stack name="authorityStack">
<interceptor-ref name="authority"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="authorityStack"></default-interceptor-ref> <!-- 配置默认权限拦截器 -->
2.上述配置中有一个拦截器的实现类AuthorityInterceptor,该类继承了AbstractInterceptor类,并且需要实现该类的一个方法public String intercept(ActionInvocation ai) throws Exception。具体代码如下:
public String intercept(ActionInvocation ai) throws Exception {
ActionContext context = ai.getInvocationContext();
String actionName = ai.getProxy().getActionName();
if(!"login".equals(actionName)){
Map map = context.getSession();
String username = (String)map.get("username");//获得session范围的用户名
if(username==null||"".equals(username)){
context.put("loginmessage", "对不起,您还没有登录!");
return Action.LOGIN;//如果用户名为空,则跳回到登陆页面
}else{
return ai.invoke();
}
}else{//如果用户斤进行登录操作则放行
return ai.invoke();
}
}
当访问除login以外的任何一个action的时候,该拦截器方法就会生效,从session中获得用户名,如果为空,则表示用户
还没有登录就想访问这个action,这种情况下当然是不允许的,所以拦截器会强制让应用跳回到login.jsp页面。其中Action.LOGIN。对应了一个视图,该视图是一个global视图,
<global-results><!-- 全局跳转,用于权限验证失败时的跳转目的地 -->
<result name="login">/login.jsp</result>
</global-results>
这样就完成了权限的拦截。