- 浏览: 348627 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pacoson:
感谢楼主。请受小生一拜。
ANT预编译JSP -
zhuhongming123:
一楼的同学Lucene4.* 以上的 已经改成了Numeric ...
Lucene日期排序及组合查询 -
ywjk520:
RangeQuery在哪个包里?
Lucene日期排序及组合查询 -
willwen:
有个疑问,楼主,为何初始化bits 从txt读取已有的网址是直 ...
布隆过滤器(Bloom Filter)之java实例 -
yu_226528:
还不如没有呢
jFreeChart 在jsp页上实现简单的折线图、柱状图
本程序是关于"某考试系统"中的aop应用.说实话,aop在spring应该算是个难点,它主是起到了"代理"的作 用,aop会为你调用的方法的对象生成代理,这个代理是继承调用 MethodInterceptor这个拦截器的对象的,所以,具备原有对象的所有方法与特性.AOP不神秘,它就是EJB的进化,只是EJB需要显式的实现接 口,而AOP不用,它会自动帮你生成代理,来做很多事情,AOP,我觉得它在处理事务 的时候用的比较多所谓声明式的事务就是由此而来.
public class AuthorityInterceptor implements MethodInterceptor
{
public Object invoke(MethodInvocation invocation) throws Throwable
{
HttpServletRequest request = null;
ActionMapping mapping = null;
Object[] args = invocation.getArguments();
for (int i = 0 ; i < args.length ; i++ )
{
if (args[i] instanceof HttpServletRequest) request = (HttpServletRequest)args[i];
if (args[i] instanceof ActionMapping) mapping = (ActionMapping)args[i];
}
Object admin = request.getSession().getAttribute("admin");
if ( admin != null && ((String)admin).equals("admin"))
{
return invocation.proceed();
}
else
{
request.setAttribute("msg" , "您还没有登录,请先登录");
return mapping.findForward("admin");
}
}
}
该应用是在*.xml中来调用的..(用struts的mvc,然后托管给spring的ioc容器来管理的,配置也是由spring来处理的)
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>/processAddStudent</value>
<value>/listStudent</value>
<value>/delStudent</value>
<value>/processAddTest</value>
<value>/addQuestion</value>
<value>/delQuestion</value>
<value>/processAddQuestion</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>authorityInterceptor</value>
</list>
</property>
</bean>
<bean id="authorityInterceptor" class="org.yeeku.action.authority.AuthorityInterceptor"/>
//解释后的代码
public class AuthorityInterceptor implements MethodInterceptor
{
public Object invoke(MethodInvocation invocation) throws Throwable
{
HttpServletRequest request = null;
ActionMapping mapping = null;
-----------注解1开始
通过invocation.getArguments()可以获取代理对象的参数
代理的参数是ActionMapping, ActionForm ,HttpServletRequest , HttpServletResponse 四个
只不过,这里根据实际情况,我们只需要使用HttpServletRequest,ActionMapping罢了
因为这里你要通过request获取session和通过mapping跳转页面
因为 Object[] args = invocation.getArguments(); 规定,返回的必须是一个数组
所以,没办法,只能迭代把要用的找出来
而我们在XML配置的对象都是Struts Action
每一个Struts Action方法都形如这样,
public ActionForward addBlog(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
所以,通过
for (int i = 0 ; i < args.length ; i++ )
{
if (args[i] instanceof HttpServletRequest) request = (HttpServletRequest)args [i];
if (args[i] instanceof ActionMapping) mapping = (ActionMapping)args[i];
}
可以从那里迭代出来
你既然都有调用 Struts 了, mapping, form, request, response 肯定都已经注入了,咱们运行Struts, 是在 mapping, form, request,
response 都具备的情况下,使用的
所以, Object[] args = invocation.getArguments();
得到应该对象的所有参数是完全可以的
--------注解1结束
Object[] args = invocation.getArguments();
---------加这两句是因为要通过request获取session 并且在判断没有权限的时候要通过mapping跳转页面
for (int i = 0 ; i < args.length ; i++ )
{
if (args[i] instanceof HttpServletRequest) request = (HttpServletRequest)args[i];
if (args[i] instanceof ActionMapping) mapping = (ActionMapping)args[i];
}
Object admin = request.getSession().getAttribute("admin");
----------
如果权限有问题,
那么invocation.procceed() 就不会执行,意味着你的那个 Action 对象**方法也不会执行, 但此时
mapping 是存在的, 来一下findForward("admin");
----------
if ( admin != null && ((String)admin).equals("admin"))
{
return invocation.proceed();
}
else
{
request.setAttribute("msg" , "您还没有登录,请先登录");
return mapping.findForward("admin");
}
}
}
发表评论
-
反射实现 AOP 动态代理模式(2)
2010-08-05 12:40 938上面类中出现的Logger类和Level枚举还是和上一上例子的 ... -
反射实现 AOP 动态代理模式(1)
2010-08-05 12:37 908其实AOP的意思就是面向切面编程.OO注重的是我们解决问题的方 ... -
Spring事务配置的五种方式
2010-06-25 16:51 788前段时间对Spring的事务配置做了比较深入的研究,在此之间对 ... -
使用 Spring 2.5 注释驱动的 IoC 功能(2)
2010-06-25 16:37 897使用 JSR-250 的注释 Sprin ... -
使用 Spring 2.5 注释驱动的 IoC 功能(1)
2010-06-25 16:36 737概述 注释配置相对于 XML 配置具有很多的优势: 它可以 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:18 1057采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring事务配置方法(TransactionProxyFactoryBean)
2010-05-11 15:10 1084采用这种方式的配置时候,配置文件的增加非常快,每个bean有需 ... -
spring事务配置方法(TransactionProxyFactoryBean继承)
2010-05-11 15:07 1125大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:05 1145采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring声明式事务
2010-05-11 14:26 840Spring中几种常见的事务配置,是Aop和Ioc的充分体现以 ... -
Spring AOP 入门实例
2010-05-01 19:18 856AOP 面向切面,可以让我们在不修改业务代码的前提下,在业务代 ... -
使用动态代理实现简单AOP
2010-05-01 19:02 798Spring默认使用JDK动态代理来实现AOP,如果业务对象没 ... -
Sping acegi 配置文件
2010-05-01 18:23 970applicationContext-acegi-securi ... -
Spring的BeanFactory
2010-05-01 18:17 785一、Spring装配Bean的过程 1. 实例化; 2. 设置 ... -
使用Spring方法注入协调不同步的bean
2010-05-01 18:00 1240<?xml version="1.0" ... -
几种加载Spring的配置文件的方式
2010-05-01 16:49 1290package com.liu.test; pu ... -
Quartz在Spring中动态设置cronExpression
2009-11-20 15:26 1243什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什 ... -
使用Spring发邮件
2009-11-07 14:15 999关于Spring的邮件发送的功能演示: (我把程序中一些敏感 ... -
Spring中的Quartz配置
2009-11-07 10:16 917Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
Spring ~IOC Annotations
2009-10-29 18:49 10441.1 零配置使用场合 IOC Annotations ...
相关推荐
这个库包括了如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`等接口,它们定义了拦截器和通知(advice)的基本行为。在Spring AOP中,你需要实现这些接口来创建自定义的切面...
Java拦截器(Interceptor)是Java应用开发中一种重要的设计模式,尤其在企业级应用和框架中,如Spring、Struts2、MyBatis等。它主要用于在方法执行前后添加额外的功能,比如日志记录、性能统计、事务管理、权限验证...
这些接口被Spring和Struts 2等框架使用,以实现切面的定义和拦截器的插入。 综合这些信息,我们可以了解到这个压缩包是为了解决Struts 2与Spring的集成问题,通过AOP Alliance来实现两者之间的兼容性。这有助于...
例如,在Spring框架中,我们可以通过实现这个接口来创建自定义的AOP拦截器,实现如事务管理、缓存控制等功能。 `Interceptor`接口则是AOP联盟的通用拦截器接口,它可以被任何AOP框架所使用。虽然`Interceptor`接口...
在Spring中,AOP Alliance的`org.aopalliance.intercept.MethodInterceptor`接口是所有拦截器必须实现的,它是Spring AOP和AspectJ AOP之间交互的基础。 其次,`aspectjrt.jar`是AspectJ运行时库,包含了运行时需要...
- `Interceptor`接口:提供拦截器功能,可以在Action执行前后插入自定义逻辑,如日志、权限检查等。 - `Result`接口:定义了动作执行后如何展示结果,如转发、重定向等。 **Spring API** Spring是一个全面的Java...
在IT行业中,四个知名的Java框架——Hibernate、MyBatis、Spring和Struts2,是开发企业级应用的重要工具。这些框架分别专注于不同的领域,如对象关系映射(ORM)、依赖注入(DI)与面向切面编程(AOP)、Web应用程序...
在拦截器中,你可以通过这个接口获取方法参数、返回值等信息。 3. **AOP在Spring中的应用**: Spring的AOP模块允许开发者定义切面,这些切面可以包含通知(advisors),即在特定点(如方法调用前、后或异常时)...
Spring的AOP模块就是基于这个库实现的,通过这些接口来定义拦截器和通知,实现事务管理的切面逻辑。 2. aspectjrt-1.2.jar:这是AspectJ运行时库,包含运行时支持类,使得我们可以在不改变原有代码的情况下添加新的...
6.1.2拦截器及拦截器栈的应用 111 6.1.3自定义拦截器 115 6.2类型转换器 117 6.2.1struts2内置类型转换器 117 6.2.2引用类型的转换方式 117 6.2.3特殊对象的类型转换 118 6.2.4类型转换的错误处理 121 6.3...