攔截器再應(yīng)用學(xué)習(xí)
攔截器
如果用戶登錄后可以訪問(wèn)action中的所有方法
user.jsp{
request.getSession().setAttribute("user", "itcast");
//專門設(shè)置用戶是否登錄狀態(tài),session來(lái)專門標(biāo)注用戶是否登錄
}
退出登錄
quit.jsp{
request.getSession().removeAttribute("user");
//將session去掉就行了..
}
如果用戶沒(méi)有登錄不允許訪問(wèn)action中的方法,并且提示
1.定義攔截器
1.1實(shí)現(xiàn)com.opensymphony.xwork2.ActionInvocation.Interceptor接口
@Override
public void destroy() {//當(dāng)此類被摧毀的時(shí)候執(zhí)行
}
@Override
public void init() {//實(shí)例化自動(dòng)執(zhí)行
}
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
Object user = ActionContext.getContext().getSession().get("user");
if(user!=null)//判斷用戶是否登錄
invocation.invoke();//執(zhí)行被攔截到的方法,不掉用,被攔截的action方法
不會(huì)被執(zhí)行
ActionContext.getContext().put("message", "you have not right");
return "success";//定義全局
}//當(dāng)攔擊到action就會(huì)執(zhí)行此方法
1.2注冊(cè)攔截器 在struts的package中注冊(cè)攔截器
<package name="employee" namespace="/control/employee" extends="struts-default">
<interceptors> <!-- 注冊(cè)攔截器 -->
<interceptor name="permission"
class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
<!-- 使用攔截器棧可以使用自定義攔截器,且 不失去系統(tǒng)自定義攔截器功能
-->
<interceptor-stack name="permissionStack">
<!-- 系統(tǒng)默認(rèn)攔截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 自定義攔截器的引入 -->
<interceptor-ref name="permission"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--默認(rèn)包里面全用此攔截器 1 與 @@對(duì)應(yīng)-->
<default-interceptor-ref name="permissionStack"></default-interceptor-ref>
<global-results>
<result name="success">/WEB-INF/page/message.jsp</result>
</global-results>
<action name="list_*" class="cn.itcast.action.HelloWorldAction"
method="{1}">
<!-- 使用攔截器 @@ -->
<!-- <interceptor-ref name="permissionStack"></interceptor-ref>
<interceptor-ref name="增加自定義新攔截器"></interceptor-ref> -->
</action>
</package>
1.3 需要定義攔截器棧,否則自定義攔截器會(huì)覆蓋struts自帶的攔截器,使struts失去自身的攔截器功能
/control/employee
如果用戶登錄后可以訪問(wèn)action中的所有方法
user.jsp{
request.getSession().setAttribute("user", "itcast");
//專門設(shè)置用戶是否登錄狀態(tài),session來(lái)專門標(biāo)注用戶是否登錄
}
退出登錄
quit.jsp{
request.getSession().removeAttribute("user");
//將session去掉就行了..
}
如果用戶沒(méi)有登錄不允許訪問(wèn)action中的方法,并且提示
1.定義攔截器
1.1實(shí)現(xiàn)com.opensymphony.xwork2.ActionInvocation.Interceptor接口
@Override
public void destroy() {//當(dāng)此類被摧毀的時(shí)候執(zhí)行
}
@Override
public void init() {//實(shí)例化自動(dòng)執(zhí)行
}
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
Object user = ActionContext.getContext().getSession().get("user");
if(user!=null)//判斷用戶是否登錄
invocation.invoke();//執(zhí)行被攔截到的方法,不掉用,被攔截的action方法
不會(huì)被執(zhí)行
ActionContext.getContext().put("message", "you have not right");
return "success";//定義全局
}//當(dāng)攔擊到action就會(huì)執(zhí)行此方法
1.2注冊(cè)攔截器 在struts的package中注冊(cè)攔截器
<package name="employee" namespace="/control/employee" extends="struts-default">
<interceptors> <!-- 注冊(cè)攔截器 -->
<interceptor name="permission"
class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
<!-- 使用攔截器棧可以使用自定義攔截器,且 不失去系統(tǒng)自定義攔截器功能
-->
<interceptor-stack name="permissionStack">
<!-- 系統(tǒng)默認(rèn)攔截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 自定義攔截器的引入 -->
<interceptor-ref name="permission"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--默認(rèn)包里面全用此攔截器 1 與 @@對(duì)應(yīng)-->
<default-interceptor-ref name="permissionStack"></default-interceptor-ref>
<global-results>
<result name="success">/WEB-INF/page/message.jsp</result>
</global-results>
<action name="list_*" class="cn.itcast.action.HelloWorldAction"
method="{1}">
<!-- 使用攔截器 @@ -->
<!-- <interceptor-ref name="permissionStack"></interceptor-ref>
<interceptor-ref name="增加自定義新攔截器"></interceptor-ref> -->
</action>
</package>
1.3 需要定義攔截器棧,否則自定義攔截器會(huì)覆蓋struts自帶的攔截器,使struts失去自身的攔截器功能
/control/employee
posted on 2012-06-07 11:55 youngturk 閱讀(176) 評(píng)論(0) 編輯 收藏 所屬分類: struts2