struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
-
理解
Interceptor攔截器類似于我們學過的過濾器,是可以在action執行前后執行的代碼.是我們做web開發是經常使用的技術,比如權限控制,日志.我們也可以把多個interceptor連在一起組成一個棧.
攔截器是一種AOP(面向切面編程)思想的編程方式.它提供一種機制是開發者能夠把相對獨立的代碼抽離出來,配置到Action前后執行.
Struts2攔截器,每個攔截器只有一個對象實例,屬于單例模式,struts2核心功能都是通過攔截器來實現的.
-
作用
對action的一些公共處理代碼可以放到攔截器中實現,比如權限控制,日志.
-
執行流程
? ? ? ? ? ? ? ? ??
?
-
實現步驟
下面寫一個自定義攔截器的例子,判斷用戶是否登錄,就是檢查當前用戶的session中的user屬性是否為空,如果為空,就跳到登錄頁面,否則,繼續執行.
1.編寫攔截器,在interceptor包下常見一個java類,名為LoginInterceptor,繼承AbstractInterceptor:
public class LoginInterceptor extends AbstractInterceptor{@Overridepublic String intercept(ActionInvocation invocation) throws Exception {//得到攔截到的action的名稱,看是否是login,當是login的時候,不用進行下面的檢測了,直接執行下一個攔截器String actionName=invocation.getProxy().getActionName();if("login".equals(actionName)){return invocation.invoke();}//如果不是login.則判斷是否已登錄,及檢測session中key為user的值是否存在,如果不存在,跳回到登錄頁面String user=(String)invocation.getInvocationContext().getSession().get("user");if(user==null){System.out.println("未登錄");return "login";}//進行到這里.說明用戶已登錄,則跳轉到下一個攔截器return invocation.invoke();}}2,在struts.xml中配置interceptor,主要特別注意的是,當使用了自定義的攔截器后,默認攔截器將不起作用,默認攔截器實在struts-default.xml中配置的,當引用了自定義攔截器,又想使用struts2提供的默認攔截器功能,需要手動配置:這里我將默認攔截器和我寫的進行登錄權限驗證的攔截器,寫到一個攔截器棧里,然后調用這個默認攔截器棧:
<package name="default" namespace="/" extends="struts-default"><interceptors><!-- 配置自定義的攔截器--><interceptor name="checkLogin" class="com.wang.interceptor.LoginInterceptor"/><!--配置一個攔截器棧,里面包含自己定義的攔截器和defaultStack默認攔截器--> <interceptor-stack name="myStack"><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="checkLogin"></interceptor-ref></interceptor-stack></interceptors><!--引用默認的攔截器(棧)--><default-interceptor-ref name="myStack"></default-interceptor-ref><!--配置一個全局結果集-->
<global-results><result name="login">/login.jsp</result></global-results><action name="login" class="com.wang.action.LoginAction" ><result>/succ.jsp</result><result name="error">/login.jsp</result></action></package>
?
這里我使用了默認攔截器標簽,即相當于在每個action標簽下,使用了?<interceptor-ref name="myStack"></interceptor-ref>.jsp頁面和LoginAction類這里就省略了.
再來介紹一下方法攔截器,方法攔截器比action攔截器控制的更加精細,大體實現方式和action攔截器相同,不同的是它繼承的是MethodFilterInterceptor類,重寫的是doInterceptor()方法,在struts.xml的配置上也有些不同,大體是這樣:
<interceptor-ref name="methodInterceptor"><!--配置被攔截的方法--><param name="includeMethods">methodA,methodsB</param> <!--配置不被攔截的方法--> <param name="excludeMethods">methodsC,methodsD</param></interceptor-ref>?
總結
以上是生活随笔為你收集整理的struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [LintCode] strStr [K
- 下一篇: 之一:CABasicAnimation