拦截器能够通过权限进行拦截,下面写一个小例子 实例分析: 用户登录后可以访问action中的所有方法 User.jsp(执行完该jsp之后,状态变为已登录) //设置用户登录状态 可以通过session来判断 如果用户没有登录,不允许访问action中的方法,并且提示“你没有权限执行该操作” User.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.getSession().setAttribute("user", "itcast"); %> 用户已经登录 Quit.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.getSession().removeAttribute("user"); %> 用户已经退出 message.jsp ${message} HelloWord.java private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String execute(){ this.message=" execute()"; return "success"; } UserInterceptor.java public class UserInterceptor implements Interceptor { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void init() { // TODO Auto-generated method stub } //当拦截到action时调用该方法 该方法相当于 aop编程中的环绕通知 @Override public String intercept(ActionInvocation interceptor) throws Exception { // TODO Auto-generated method stub Object user=ActionContext.getContext().getSession().get("user"); //如果user不为null,代表用户已经登录,运行执行action中的方法 if(user!=null){ return interceptor.invoke(); } ActionContext.getContext().put("message", "你没有权限执行该操作"); return "message"; } } struts.xml <!-- 注册拦截器 --> <interceptors> <interceptor name="user" class="cn.csdn.Interceptor.UserInterceptor"/> <interceptor-stack name="usetStack"> <!-- 要把系统的拦截器栈放在前面,把自定义的拦截器放在后面 。放在前面会先执行--> <!-- 引入系统得拦截器栈 --> <interceptor-ref name="defaultStack"/> <interceptor-ref name="user"/> </interceptor-stack> </interceptors> <global-results> <result name="message">/WEB-INF/page/message.jsp</result> </global-results> <action name="helloword" class="cn.itcast.action.HelloWordAction" method="execute"> <result name="success">/WEB-INF/page/message.jsp</result> <!-- 如果这样写的话,虽然能够使用这个自定义的拦截器了,但是会失去struts2一系列的拦截器 如果既想使用自定义拦截器,又不想失去struts2中一系列的拦截器的话,可以定义一个拦截器栈 --> <!-- <interceptor-ref name="user"/> --> <!--引入上面定义的拦截器栈 --> <interceptor-ref name="usetStack"></interceptor-ref> </action> </package> 访问: 当直接访问action时,会显示文本你没有权限执行该操作,当访问User.jsp之后再访问action时,显示的文本就为execute()了 注意:如果action中已经有了拦截器,那么所有的默认拦截器都会失效,不过action中可以放置多个拦截器