拦截器是可以控制权限,当用户需要查看查看某些功能的时候,需要判断是不是登录了,如果没有登录的,就可拦截的过程。。

首先,我们都知道struts.xml 中有action 节点, 这个节点表示你想要访问的功能。

如果我们不想让用户直接去干遇到它,则可以为他设置一个拦截器iterceptor

可以再sturts.xml 中这样写:

 <interceptors>
<!--配置拦截器 -->
<interceptor name="myinter" class="cn.happy.interceptor.MyInterceptor"></interceptor>
<!--配置拦截器的栈 -->
<interceptor-stack name="myStack">
<!-- 配合拦截器引用 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myinter"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--默认拦截器的引用 -->
<default-interceptor-ref name="myStack"/>

现在有了这个拦截器,我们要实现的功能就可以通过被拦截器拦截了

现在比如说我们要写一个查看图书的功能。

首先创建出一个bookAction,这是里边包含我们要实现的功能用方法list()表示

package cn.happy.action;

import com.opensymphony.xwork2.ActionSupport;

public class BookAction extends ActionSupport{
public String list(){
System.out.println("BookAction====list");
return "list";
}
}

 然后把这个action 关联到struts.xml中:在这里我们在struts.xml中的基础上再次创建出book.xml(这个xml是继承了struts.xml中包)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="book" namespace="/book" extends="main">
<!-- 图书的配置 -->
<action name="bookAction" class="cn.happy.action.BookAction" method="list">
<result name="list">/myinter/list.jsp</result>
<result name="success">/myinter/success.jsp</result>
<result name="login">/myinter/login.jsp</result>
</action>
</package>
</struts>

现在就到了关键的阶段,就是用于拦截的我们创建的拦截的类首先注意的是需要继承abstractInterceptor 或者实现Interceptor

关键代码如下:

package cn.happy.interceptor;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; /**
* 拦截器
* @author Happy
*
*/
public class MyInterceptor implements Interceptor{ public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("拦截器执行了===="+invocation.getProxy().getMethod());
//01.获取Session对象
Map<String, Object> session = ActionContext.getContext().getSession();
Object obj = session.get("uname");
String value=""; //代表Action执行完后的逻辑视图名
//先获取到action请求的名称
String actionName = invocation.getProxy().getActionName();
//默认在登录页面 正在登录,登录成功之后需要放行
if (actionName.equals("loginAction")) {
invocation.invoke();
}else {
//判断是不是登录过了
if(obj!=null){
//证明用户登录了
//放行 请求执行其他拦截器 后者具体的Action
value= invocation.invoke();
}else {
//证明用户没有登录
value="login";
}
}
System.out.println("逻辑视图"+value);
return value;
}
/**
* 销毁:执行一次
*/
public void destroy() {
System.out.println("拦截器destroy");
}
/**
* 初始化一次:
*/
public void init() {
System.out.println("拦截器init");
} }

之后就可以再浏览器界面直接访问http://localhost:8080/Struts04_0100/book/bookAction就可以了

Interceptor的更多相关文章

  1. 通过拦截器Interceptor实现Spring MVC中Controller接口访问信息的记录

    java web工程项目使用了Spring+Spring MVC+Hibernate的结构,在Controller中的方法都是用于处理前端的访问信息,Controller通过调用Service进行业务 ...

  2. Struts 2的拦截器(Interceptor)总结

     什么是Struts 2拦截器? 从软件构架上来说,拦截器是实现了面向方面编程的组件.它将影响了多个业务对象的公共行为封装到一个个可重用的模块,减少了系统的重复代码,实现功能的高度内聚,确保了业务对象 ...

  3. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  4. servlet/filter/listener/interceptor区别与联系

    转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...

  5. Servlet、Filter、Listener、Interceptor

    首先,JSP/Servlet规范中定义了Servlet.Filter.Listener这三种角色,并没有定义Interceptor这个角 色,Interceptor是某些MVC框架中的角色,比如Str ...

  6. struts2的拦截器(Interceptor)与过滤器(Filter)

    一.拦截器与过滤器的区别: 1.filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于Java本身的反射机制,这是两者最本质的区别. ...

  7. Struts2 Interceptor学习

    Interceptor的设计思想,其实是Spring里面的AOP思想,尽管Struts2又有自己的Interceptor但是,在实际开发中,用的较少,SSH整合之后你可以采用AOP事务处理进行拦截,更 ...

  8. SpringMVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

  9. springMVC分页,interceptor实现

    PageInterceptor.java @Intercepts({ @Signature(type = StatementHandler.class, method = "prepare& ...

  10. Struts2之Struts2-2.5.5 Interceptor

    Struts2-2.5.5版本是目前为止最新的版本了,相对于之前的2.3版本以及再之前的版本而言,新版本改动了很多. 好了,废话不多说,GO CODE! 基本jar包: web.xml核心配置,这里要 ...

随机推荐

  1. Visual Studio 2013 的 Xamarin 安装教程

    Xamarin 配置手册和离线包下载  http://pan.baidu.com/s/1eQ3qw8a 具体操作: 安装前提条件 1. 安装Visual Studio 2013,安装过程省略,我这里安 ...

  2. Android基础面试题

    1. 请描述一下Activity 生命周期. 答: 如下图所示.共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onP ...

  3. Autodesk 360 Mobile不能显示图片?

    在6月21号的DevLab上,有一位朋友说Autodesk 360 Mobile在iPad上不能显示JPG图片预览.我当时没带iPad,不能测试.后天回家在Autodesk 360 Mobile 3. ...

  4. 100个高质量Java开发者博客

    ImportNew注:原文中还没有100个.作者希望大家一起来推荐高质量的Java开发博客,然后不段补充到这个列表.欢迎你也参与推荐优质的Java开发博客.(声明一下:我们的数学不是体育老师教的!:) ...

  5. ios7 tableview被navigationbar挡住

    用ego下拉刷新的时候,每次在ios7时,tableview都会上移...导致被navagationbar挡住.ios6是正常的,于是在init的时候添加如下代码... NSComparisonRes ...

  6. 动画效果 View控件的显示和隐藏效果

    显示动画: mShowAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f,     Animation.RELATIVE_ ...

  7. 造成OOM(内存溢出)的几种情况

    数据库Cursor没关.当我们操作完数据库后,一定要调用close()释放资源. 构造Adapter没有使用缓存ContentView. @Override public View getView(i ...

  8. java中实现线程同步

    为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他 ...

  9. 基于ruby的watir自动化测试 笔记一

    基于Ruby的watir-webdriver自动化测试方案与实施(五)   基于Ruby的watir-webdriver自动化测试方案与实施(四)   基于Ruby的watir-webdriver自动 ...

  10. WPF学习之路(七)应用程序和窗口

    手动创建应用程序 1.创建Empty Project 2.添加引用 3.添加 ManualApp.cs 并添加下面的代码 [STAThread] public static void Main() { ...