国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Struts2(十四)攔截器實現權限管理

2019-11-14 23:36:50
字體:
來源:轉載
供稿:網友
Struts2(十四)攔截器實現權限管理一、認識攔截器

攔截器也是一個類

攔截器可以在Action被調用之前和之后執(zhí)行代碼

框架很多核心功能是攔截器實現的

攔截器的特點:

攔截器自由組合,增強了靈活性、擴展性、有利于系統解耦

攔截器可以攔截Action請求

在訪問的Action執(zhí)行之前和執(zhí)行之后執(zhí)行代碼實現某項功能

Struts2:

大部分功能是在攔截器中實現的如:接收輸入的參數,數據驗證,文件上傳,國際化等

應用程序:

需要在Action執(zhí)行的前后執(zhí)行特定功能

Action執(zhí)行時間統計,Action訪問權限管理

Action添加功能,Action代碼不動使用攔截器實現功能

二、攔截器工作方式

三、自帶的一些攔截器

Struts2還有很多攔截器。

四、攔截器棧

從結構上 :攔截器棧就是一組攔截器

從功能上:攔截器棧也是攔截器

五、默認攔截器

六、計算運行Action的時間

MyTimerInterceptor

package com.pb.web.interceptor;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class MyTimerInterceptor extends AbstractInterceptor {        //實現父類的方法    @Override    public String intercept(ActionInvocation invocation) throws Exception {        //執(zhí)行前的時間         long startTime=System.currentTimeMillis();        System.out.

struts.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>    <!--  禁用動態(tài)方法調用-->    <constant name="struts.enable.DynamicMethodInvocation" value="false" />    <!--  啟用開發(fā)模式后,更改設置不用重啟Tomcat-->    <constant name="struts.devMode" value="true" />    <!-- 包默認繼承strus-default -->    <package name="default" namespace="/" extends="struts-default">    <interceptors>    <interceptor name="myTimer" class="com.pb.web.interceptor.MyTimerInterceptor"></interceptor>    </interceptors>       <action name="hello" class="com.pb.web.action.HelloAction" method="hello">       <result name="success">/index.jsp</result>       <result name="input">/index.jsp</result>       <result name="error">/index.jsp</result>       <!--  啟用自定義的攔截器-->       <interceptor-ref name="myTimer"/>       <!-- 同時啟用struts2默認的攔截器名稱為defaultStack -->       <interceptor-ref name="defaultStack"/>       </action>    </package></struts>
七、自定義攔截器

struts2有三種方法自定義攔截器

  • 實現interceptor接口
  • 繼承AbstractInterceptor類
  • 繼承MethodFilterInterceptor類

八、簡單例子實現登錄后某個頁面才能訪問

登錄后才能訪問/WEB-INF/page/security.jsp

實體類

package com.pb.entity;/* * 用戶類 */public class User {    private String username;    private String passWord;            public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }        }
package com.pb.web.action;import java.util.Map;import org.apache.struts2.interceptor.sessionAware;import com.opensymphony.xwork2.ActionSupport;import com.pb.entity.User;public class LoginAction extends ActionSupport implements SessionAware {    private User user;    private Map<String, Object> session;    //登錄    public String login(){        if("admin".equals(user.getUsername())&&"admin".equals(user.getPassword())){            session.put("user", user);            return SUCCESS;        }        return ERROR;    }        public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }    @Override    public void setSession(Map<String, Object> session) {        this.session=session;            }    public Map<String, Object> getSession() {        return session;    }        }

攔截器

package com.pb.web.interceptor;import java.util.Map;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;import com.pb.entity.User;public class MyInterceptor extends AbstractInterceptor {    @Override    public String intercept(ActionInvocation invocation) throws Exception {        Map<String, Object> session=ActionContext.getContext().getSession();        //獲取session中保持的用戶信息        User user=(User) session.get("user");        if(user!=null){            //如果用戶已經登錄,繼續(xù)執(zhí)行剩余的攔截器和Action            return invocation.invoke();        }else{            //如果用戶尚未登錄,返回到登錄頁面            return Action.LOGIN;        }            }}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>   <package name="default" namespace="/" extends="struts-default">   <interceptors>   <!--定義權限驗證攔截器 -->   <interceptor name="myInterceptor" class="com.pb.web.interceptor.MyInterceptor"></interceptor>   <!--定義攔截器棧 -->   <interceptor-stack name="myStack">   <!--使用默認的攔截器 -->   <interceptor-ref name="defaultStack"  />      <interceptor-ref name="myInterceptor"  />   </interceptor-stack>   </interceptors>   <!--  定義全局結果返回login時,返回登錄頁面-->   <global-results>   <!--以重定向的方式跳轉  -->   <result name="login" type="redirect">/login.jsp</result>   </global-results>   <!-- action-->   <action name="login" class="com.pb.web.action.LoginAction" method="login">   <!--  結果判斷和頁面跳轉-->   <result name="success">/loginSuccess.jsp</result>   <result name="error">/error.jsp</result>   </action>   <action name="security">   <interceptor-ref name="myStack" />   <result name="success"> /WEB-INF/page/security.jsp   </result>      </action>   </package></struts>
九、攔截器使用和與過濾器的不同之處

與過濾器的相同之處:

  • 功能相似
  • 原理相似
  • 方法相似

與過濾器的不同之處:

  • 攔截器用于攔截Action請求,而過濾器幾乎可以過濾所有的請求
  • 攔截器中可以獲取Action的當前執(zhí)行狀態(tài),而過濾器不可以
  • 過濾器是Servlet中概念,在Web.xml中配置;攔截器是Struts2/Webwork中的概念在struts.xml中配置


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 盱眙县| 喜德县| 兰州市| 六枝特区| 望城县| 梁河县| 德昌县| 岑溪市| 元谋县| 博罗县| 大洼县| 台州市| 汾西县| 客服| 新津县| 河池市| 来凤县| 长泰县| 托克逊县| 师宗县| 柯坪县| 津市市| 高雄市| 扬州市| 新巴尔虎左旗| 琼海市| 靖边县| 长海县| 长宁区| 河津市| 伊通| 浮梁县| 胶南市| 日照市| 广宗县| 普定县| 河北省| 民乐县| 屯门区| 华池县| 浦城县|