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

首先,我们都知道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. Navigator对象、Screen对象

    Navigator对象:         Window对象的navigator属性引用的是包含浏览器厂商和版本信息的Navigator对象:   Navigator对象集合:plugins[] 返回对 ...

  2. ArcSDE安装注意事项

    今天因为测试需要配置环境,因此在本机上安装了ArcSDE 9.3 for Oracle11g,但是发现安装完之后服务(esri_sde)出现了启动后又立马停止的问题,解决方法如下: 1)检查Oracl ...

  3. Android Studio教程--Android项目分享到Github

    首先下载安装git 下载地址:https://git-scm.com/ 打开AS,并设置如下: 到github上面注册一个帐号 运行--cmd cd C:\Program Files\Git\bin ...

  4. iOS 跳转到App Store下载或评论

    //跳转到app在AppStore页面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString string ...

  5. C#问题

    1.结构体里面是否可以有属性? 可以有属性.实测代码以及截图. In C#, we can use the following statement to convert a string s to a ...

  6. Visio作图

    1.Microsoft Visio介绍 Visio是一款便于IT和商务专业人员就复杂信息.系统和流程进行可视化处理.分析和交流的软件,也是Microsoft Office办公软件家族中的一个绘图工具软 ...

  7. HttpModule

    HttpModule是如何工作的 当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,Htt ...

  8. ORACLE数据库异步IO介绍

    异步IO概念 Linux 异步 I/O (AIO)是 Linux 内核中提供的一个增强的功能.它是Linux 2.6 版本内核的一个标准特性,当然我们在2.4 版本内核的补丁中也可以找到它.AIO 背 ...

  9. Spring 整体架构

    1. Core Container:核心容器(core.Beans.Context.Expression Language   Core.Beans框架基础构成,提供IOC.依赖注入特性.BeanFa ...

  10. Oracle索引梳理系列(三)- Oracle索引种类之反向索引

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...