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

首先,我们都知道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. 8款超实用JavaScript框架

    下面盘点了8款实用的JavaScript框架: 1. Hammer.js Hammer.js是被广泛使用的轻量级JavaScript框架,它提供了常用触摸操作的规范,比如收缩.拖放.双击和删除等等.它 ...

  2. 使用Javascript来编写贪食蛇(零基础)

      引用的东西都很基础,注释也很多,这里就不多说了. <head> <meta http-equiv="Content-Type" content="t ...

  3. spring.net (2)环境搭建 对(1)例子的解释和扩充

    在上文中的例子实现了spring.net 控制反转的简单例子: 但是不免其中会有一些疑问. 例子中的配置文件是什么意思: app.config的配置规则可以参考web.config的配置详情 < ...

  4. Android项目实战(十九):Android Studio 优秀插件: Parcelable Code Generator

    Android Studio 优秀插件系列: Android Studio 优秀插件(一):GsonFormat Android Studio 优秀插件(二): Parcelable Code Gen ...

  5. Android 项目实战--手机卫士(实现splash)

    从今天开始根据之前学习的android的基础知识,实战一下,实现一个简单功能的android手机卫士 本文地址:http://www.cnblogs.com/wuyudong/p/5899283.ht ...

  6. Android java传递int类型数组给C

    接着前面的文章<Android java传递int类型数据给C><Android java传递string类型数据给C>,继续实践 实现public native int[] ...

  7. 开放-封闭原则(OCP)开-闭原则 和 依赖倒转原则,单一职责原则

    单一职责原则 1.单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因 2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力. ...

  8. iOS之 APNs全新的APNs苹果15年WWDC大会上的干货

    记得14年在dl某大学校招上现场面试iOS时候被问到了APNs也就是苹果的推送问题,当时我表示一脸懵逼,因为当时还没有真正接触做过项目也就了解了个大概,总之当时回答的一塌糊涂!后来回去就在网上仔细查了 ...

  9. 1.6 基础知识——GP2.5 培训(Training)

    摘要: 实际上做任何项目总会缺失各种技能,培训特别是未雨绸缪的培训就显得很必要了! 正文: GP2.5 Traing the people performing or supporting XXX p ...

  10. 分享php工作中遇到的一些探究和技巧【1】

    一 foreach的引用 $arr = range(,); //[1,2,3] foreach($arr as &$val) { } foreach($arr as $val) { } pri ...