攔截器
如果用戶登錄后可以訪問action中的所有方法
user.jsp{
request.getSession().setAttribute("user", "itcast");
//專門設置用戶是否登錄狀態,session來專門標注用戶是否登錄
}
退出登錄
quit.jsp{
request.getSession().removeAttribute("user");
//將session去掉就行了..
}
如果用戶沒有登錄不允許訪問action中的方法,并且提示
1.定義攔截器
1.1實現com.opensymphony.xwork2.ActionInvocation.Interceptor接口
@Override
public void destroy() {//當此類被摧毀的時候執行
}
@Override
public void init() {//實例化自動執行
}
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
Object user = ActionContext.getContext().getSession().get("user");
if(user!=null)//判斷用戶是否登錄
invocation.invoke();//執行被攔截到的方法,不掉用,被攔截的action方法
不會被執行
ActionContext.getContext().put("message", "you have not right");
return "success";//定義全局
}//當攔擊到action就會執行此方法
1.2注冊攔截器 在struts的package中注冊攔截器
<package name="employee" namespace="/control/employee" extends="struts-default">
<interceptors> <!-- 注冊攔截器 -->
<interceptor name="permission"
class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
<!-- 使用攔截器棧可以使用自定義攔截器,且 不失去系統自定義攔截器功能
-->
<interceptor-stack name="permissionStack">
<!-- 系統默認攔截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 自定義攔截器的引入 -->
<interceptor-ref name="permission"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--默認包里面全用此攔截器 1 與 @@對應-->
<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 需要定義攔截器棧,否則自定義攔截器會覆蓋struts自帶的攔截器,使struts失去自身的攔截器功能
/control/employee