通常来讲,咱们的web系统都是只有在用户登陆以后才容许操做的,也就是说咱们不容许非登陆认证的用户直接访问某些页面或功能菜单项。对于struts项目来讲就能够定义拦截器来实现。java
一、定义一个拦截器类(类里面经过判断是否有用户存在session里面,若是没有就拦截要访问的页面)web
二、在struts2配置文件中配置拦截器session
三、 在要拦截的action中使用拦截器接口jsp
拦截器:ide
package cn.edu.gxuwz.interceptor; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; import cn.edu.gxuwz.entity.SysUser; @SuppressWarnings("serial") public class PrivilegeInterceptor extends MethodFilterInterceptor { //执行拦截的方法 @Override protected String doIntercept(ActionInvocation actionInvocation) throws Exception { // TODO Auto-generated method stub //判断session中是否保存了后台用户的信息 SysUser sysUser = (SysUser) ActionContext.getContext().getSession().get("sysUser"); if(sysUser == null){ //没有登陆就进行访问了 ActionSupport actionSupport = (ActionSupport) actionInvocation.getAction(); actionSupport.addActionError("亲,您尚未登陆,没有权限访问!"); return "error"; }else{ //已经登陆过了 return actionInvocation.invoke(); } } }
struts.xml:spa
<!--配置全局映射视图,捕获全部 异常跳转指定页面 --> <package name="base" extends="struts-default"> <interceptors> <interceptor name="myinterceptor" class="cn.edu.gxuwz.interceptor.PrivilegeInterceptor"> </interceptor> <!-- 定义拦截栈 --> <interceptor-stack name="loginStack"> <interceptor-ref name="myinterceptor"> <!-- 拦截action中的某些方法 <param name="includeMethods">method1,method2</param> --> <!-- 不拦截action中的某些方法 --> <param name="excludeMethods">webLogin</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> </package>
struts-web.xml:code
<!-- 定义系统设置模块 --> <package name="biz" extends="base" namespace="/biz"> <!--系统设置 --> <action name="*_*" class="cn.edu.gxuwz.action.{1}Action" method="{2}"> <result name="success">${forwardView}</result> <result name="error">${forwardView}</result> <result name="input">/error/error.jsp</result> <!-- 添加拦截器 --> <interceptor-ref name="loginStack"></interceptor-ref> </action> </package>