通常來講,咱們的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>