拦截器
如果用户登录后可以访问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