使用攔截器完成權限控制
本文將通過攔截器實現一個實用功能 -使用攔截器實現權限控制(簡單的)
功能描述:當用戶執行一個操作時,先檢查用戶是否已經登錄,否則轉到登錄頁面
檢查用戶登錄,一般檢查的是session中是否有該用戶的登錄信息,
代碼如下:
public class Author extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
//取得相應的實例,假設用戶在登陸後,以user存在session中
// 1:String user= (String) ServletActionContext.getRequest().getSession().getAttribute("user");
//第二種方法取得
ActionContext ctx = invocation.getInvocationContext();
String user = (String) ctx.getSession().get("user");
if(null != user && "zhangsan".equals(user))
return invocation.invoke();//執行action中的方法
//沒有登陸,將服務器提示設置成一個HttpServletRequest屬性
ctx.put("tips", "請登錄!!");
return "login";
}
}
struts.xml中的部分代碼:
<package>
<interceptors>
<interceptor name="myLoginInterceptor" class="pageInterCeptor.Author"/>
</interceptors>
<action>
<result name="success">/success.jsp</result>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="myLoginInterceptor"/>
</action>
</package>
當然也可以配置成一個攔截器棧,方便使用:
package>
<interceptors>
<interceptor name="myLoginInterceptor" class=pageInterCeptor.Author">
<!-- 頂一個一個包括默認攔截器以及權限檢查的攔截器-->
<interceptor-ref name="default-stack"/>
<interceptor-ref name="myLoginInterceptor"/>
</interceptors>
</package>