日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

發布時間:2025/3/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  •  理解  

    Interceptor攔截器類似于我們學過的過濾器,是可以在action執行前后執行的代碼.是我們做web開發是經常使用的技術,比如權限控制,日志.我們也可以把多個interceptor連在一起組成一個棧.

    攔截器是一種AOP(面向切面編程)思想的編程方式.它提供一種機制是開發者能夠把相對獨立的代碼抽離出來,配置到Action前后執行.

    Struts2攔截器,每個攔截器只有一個對象實例,屬于單例模式,struts2核心功能都是通過攔截器來實現的.

  •  作用

    對action的一些公共處理代碼可以放到攔截器中實現,比如權限控制,日志.

  •  執行流程

? ? ? ? ? ? ? ? ??

?

  • 實現步驟

  •   編寫攔截器(實現interceptor接口或繼承AbstractInterceptor抽象類即可, )
  •   在struts.xml中配置攔截器
  •   在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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。