struts2 过滤器学习

作用:在访问action前,后 拦截,验证或进行相应处理。本人使用拦截器是要实现登录验证功能,在访问每个action前,验证是否存在用户session

1. 编写struts2 web.xml

<struts>
    <constant name="struts.devMode" value="true" /><!-- 开发者模式-->
    <constant name="struts.multipart.maxSize" value="50000000" /><!--设置最大上传限制,默认不超过2m(具体不清楚)-->
    <package name="test" extends="struts-default" namespace="/">

             <!-- 定义一个拦截器 -->
        <interceptors>
            <interceptor name="authority"    class="com.zzbj.util.LoginInterceptor">
            </interceptor>
            <!-- 拦截器栈 -->
            <interceptor-stack name="mydefault">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="authority" />
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="mydefault"/> <!--定义为默认拦截器,全局拦截,也可以针对action 定义拦截器-->
        <!-- 定义全局Result -->
        <global-results>
            <!-- 当返回login视图名时,转入/login.jsp页面 -->
            <result name="login">/index.jsp</result>
          <!--后面三个是捕获action throws Exception-->            <result name="sql">/Error.jsp</result>
            <result name="invalidinput">/Error.jsp</result>
            <result name="naming">/Error.jsp</result>
        </global-results>
        <global-exception-mappings>
            <exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping>
            <exception-mapping result="invalidinput"
                exception="cn.codeplus.exception.InvalidInputException"></exception-mapping>
            <exception-mapping result="naming"
            exception="javax.naming.NamingException"></exception-mapping>
        </global-exception-mappings>
        <action name="user_*" class="com.zzbj.action.UserAction"
            method="{1}">
            <result>/UserManage.jsp</result>
        </action>
    </package>
</struts> 

2. 自定义拦截器com.zzbj.util.LoginInterceptor

 1 public class LoginInterceptor extends AbstractInterceptor {
 2     @Override
 3     public String intercept(ActionInvocation invocation) throws Exception {
 4         System.out.println("映射");
 5         // 取得请求相关的ActionContext实例
 6         ActionContext ctx = invocation.getInvocationContext();
 7         Map session = ctx.getSession();
 8         String userRule = (String) session.get("RULE");
 9         // 如果没有登陆,或者权限rule首位不为1(没有该类权限),都返回重新登陆
10         if (userRule != null && userRule.charAt(0)==‘1‘) {
11             System.out.println("已登录");
12             return invocation.invoke();
13         }
14         ctx.put("return", "你还没有登录");
15         return Action.LOGIN;
16     }
17 } 

最后bug 出现在我是使用的struts2,servlet 共存,所以 struts2 在web.xml中url-pattern 过滤的不是所有而是*.aciton   *.jsp.悲剧的发现对直接登录jsp页面毫无作用,决定使用servlet 的过滤器

struts2 过滤器学习

时间: 2024-08-03 11:27:27

struts2 过滤器学习的相关文章

Struts2框架学习

Struts2框架 一.一个mini Struts框架的实现 1.首先遵循MVC模式创建包 2.在Struts.xml文件里配置action 3.用dom4j来解析xml 4.用filter来实现拦截作用   好处:1.降低了类与类之间的关联(解耦和)   2.如果你要增加一些功能的话  可以在filter里面增加 实现的mini Struts工程结构: 具体实现的代码: public class HelloAction { public String execute(){ System.out

Struts2重新学习之自定义拦截器(判断用户是否是登录状态)

拦截器 一:1:概念:Interceptor拦截器类似于我们学习过的过滤器,是可以再action执行前后执行的代码.是web开发时,常用的技术.比如,权限控制,日志记录. 2:多个拦截器Interceptor连在一起组成了Interceptor栈.拦截器是AOP面向切面编程的一种实现,具有热插拔的效应. 3:Struts2拦截器,每个拦截器类只有一个对象实例,即采用了单利模式.所有引用这个拦截器的action都共享着一拦截器类的实例. 拦截器和过滤器的区别 1:拦截器和过滤器的概念非常类似 2:

Struts2基础学习总结

Struts2基础学习总结(一)---入门 Struts 2: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大.Struts2以WebWork为核心,采用拦

Struts2 + Spring 学习(一)搭建struts开发环境

·为Web应用增加Struts2支持 1. 登陆struts2官网下载struts2的最新版,本文所用的是Struts 2.3.16.2 我们所下载的压缩包内内容应给如下 其中,apps包含了struts2的实例应用,docs包含了struts2的相关文档,lib包含了Struts2框架的核心类库以及struts2的第三方插件类库,src包含了struc包含了struts2框架的全部源码. 2. 在Eclipse新建Web工程,将是所用到的类库放到WEB-INF/路径下 3. 编辑Web应用的w

Struts2框架学习(一)

Struts2框架学习(一) 1,Struts2框架介绍 Struts2框架是MVC流程框架,适合分层开发.框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计. 2,Struts2框架的流程原理 1)请求先到达Filter中央控制器 2)然后为Action创建代理类 3)将各个服务存放在拦截器中,执行完拦截器后再去执行action类行action类,action类调用service,再调用dao 4)得到结果字符串,创建result对象 5)转向相应的视图.

Struts2框架学习(三) 数据处理

Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:ValueStack一种数据结构,操作数据的方式为:先进后出 OGNL : Object-GraphNavigation Language(对象图形导航语言)将多个对象的关系使用一种树形的结构展现出来,更像一个图形,那么如果需要对树形结构的节点数据进行操作,那么可以使用 对象.属性 的方式进行操作,OGNL技

Struts2框架学习(二) Action

Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器拦截请求,创建代理Action对象,执行方法,返回结果,界面跳转. 拦截器解析请求路径,获取Action的名称,到配置文件中查找action的完整类名,利用反射创建对象. 每请求一次,就创建一个对象,所以action是多例的,也是线程安全的. 2,关系 请求的路径和配置文件的对应关系: 配置文件中包

Struts2重新学习2之struts2和struts1的区别

1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能.Struts 2提供一个ActionSupport基类去实现常用的接口.即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用 作Struts 2的Action. 2) 线程模式方面的对比:Struts 1 A

Struts2重新学习1

一:框架 1:框架的意义在于可以大大提高我们的开发效率.框架时一种主动涉及,使用框架必须最受框架指定好的开发流程. 2:框架的强大之处不是源自它能让你做什么,而是它不能让你做什么.有规有矩,方可成方圆.有规则,大家都能上手. 二:Struts2 1:Struts2是一个MVC框架. 2:MVC--->模型(Model)视图(View)控制台(Controller) Model层实现了系统中的业务逻辑,通常可以用javaBean或EJB来实现 View层用于与用户交互,通常用jsp实现. Cont