标签:
首先我们来以一个权限拦截器 的例子来说明自定义拦截器,登录之后才可以访问action中的方法,没有登录的话提示用户登录
首先建立一个设置登录状态的jsp login.jsp
<%request.getSession().setAttribute("user","dbq_00");%>
建立一个退出登录状态的jsp quit.jsp
<%request.getSession.removeAttribute("user");%>
现在来建立action
package com.day05;
public class demo {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String messsage) {
this.message = messsage;
}
public String addUI(){
this.message = "addUI()";
return "success";
}
public String execute(){
this.message = "execute()";
return "success";
}
}
在action中配置
<package name="day05" namespace="/day05" extends="struts-default">
<action name="demo_*" class="com.day05.demo" method="{1}">
<result name="success">/show.jsp</result>
</action>
</package>
访问一下 能访问
下面我们来建立拦截器拦截浏览器的访问
package com.day05;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class demo1 implements Interceptor{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init() {
// TODO Auto-generated method stub
}
@Override
public String intercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
Object user = ActionContext.getContext().getSession().get("user");
if(user!=null) //如果用户不为空 证明用户已经登录
{
return arg0.invoke(); //返回的是action中的视图 success
}
else
{
ActionContext.getContext().put("message", "对不起您还没有登录");
return "message"; //跳转到message视图
}
}然后在struts中注册拦截器
}
<interceptors>
<interceptor name="demo" class="com.day05.demo1">
</interceptor>
</interceptors>
然后在action中使用就行了
<interceptor-ref name="demo"></interceptor-ref>
我们 没有登录就会提示没有登录
登录之后就可以 访问action 了
但是这样在action中直接使用拦截器struts的默认拦截器不会被执行 不过我们可以使用 拦截器栈
<interceptors>
<interceptor name="demo" class="com.day05.demo1" />
<!-- 拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack" /> <!--struts的拦截器栈-->
<interceptor-ref name="demo" /> <!--自定义的拦截器-->
</interceptor-stack>
</interceptors>
<action name="demo_*" class="com.day05.demo" method="{1}">
<interceptor-ref name="myStack" /> <!--在action中直接使用拦截器栈-->
<result name="success">/show.jsp</result>
<result name="message">/message.jsp</result>
</action>
标签:
原文地址:http://www.cnblogs.com/dbqjava/p/4378099.html