spring拦截器配置

 

spring 配置文件中:

 

 

Java代码
  1. <bean id= "authInterceptor"   class = "utils.AuthMethodInterceptor" >  
  2.   
  3.     </bean>  
  4.   
  5.   
  6.     <bean  
  7.         class = "org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" >  
  8.         <property name="interceptorNames" >  
  9.             <list>  
  10.                 <value>authInterceptor</value>  
  11.             </list>  
  12.         </property>  
  13.         <property name="beanNames" >  
  14.             <list>  
  15.                 <value>/*insert</value>  
  16.   
  17.                   
  18.             </list>  
  19.         </property>  
  20.   
  21.     </bean> 

spring 拦截器是spring AOP体系下的一个重要的子功能。它类似于web中的filter,但又比filter灵活,强大得多。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。(见Spring Framework 开发参考手册第6章 ),拦截功能是spring AOP实现面向切面编程的一个亮点,我们这里通过一个示例来看看如何使用拦截功能的:

这个例子是通过拦截指定的bean,在外部调用他们其中的方法被之前将触发拦截器。
首先,编写一个个拦截器:SpringAOPInterceptor.java
public class SpringAOPInterceptor implements MethodBeforeAdvice {

public void before(Method method, Object[] args, Object target)
throws Throwable {
System.out .println("The Interceptor method name is: "
+ method.getDeclaringClass().getName() + ". "
+ method.getName());
String value = "" ;
for (int i=0;ilength;i++){
value += args[i].toString()+"&" ;
}
System.out .println( "The method parames is:" +value);
System.out .println( "The target class is:" + target.getClass().getName());
}
该 拦截器使用的是前置通知(before advice),它可以在该切入点也就是调用该方法前执行自定义的行为,但不能在切入点处理完返回过程中执行拦截,也就没办法改变切入点的返回值.如果想 使用其他切入点进行拦截,可以查看org.springframework.aop包(Spring的通知API)下的其他类.
随后,我们可以编写几个需要被拦截的类,这里,我不再提供了,大家随便写个test类吧^_^.
最后,需要把拦截器注册到bean容器(applicationcontext.xml)内.并把要拦截的bean一起注入到自动代理bean定义 类org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator中.
例子如下:
<bean name ="logger"  class ="com.comwave.sc.form.ao010.test.SpringAOPInterceptor" method ="dispose"
<bean name = "loggingAutoProxy"
class ="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"
<property name = "beanNames"
    <value> userDAO</value> <!-- 在这里可以声明多个需要拦截的bean -->
</property>
<property name = "interceptorNames"
  <list>
  <value> logger</value> <!-- 同样,在这里可以声明多个拦截器,注意次序前后 -->
 </list>
</property>
</bean>

拦截器在spring中一般都是用来类似过滤器的功能,如日志处理、编码转换、权限检查等。以后仍会对spring的拦截器进行更加深入的研究。

 

  在struts -config.xml中配置

  1. <controller  
  2.  processorClass="org.springframework.web.struts .DelegatingRequestProcessor" >  
  3. </controller>  
 <controller
  processorClass="org.springframework.web.struts


.DelegatingRequestProcessor">
 </controller>

 新建AuthMethodInteceptor:

  1. import  java.util.Date;  
  2.   
  3. import  javax.servlet.http.HttpServletRequest;  
  4.   
  5. import  org.aopalliance.intercept.MethodInterceptor;  
  6. import  org.aopalliance.intercept.MethodInvocation;  
  7. import  org.apache.struts .action.ActionMapping;  
  8.   
  9. import  entity.Users;  
  10.   
  11. public   class  AuthMethodInterceptor  implements  MethodInterceptor {  
  12.   
  13.     public  Object invoke(MethodInvocation invocation)  throws  Throwable {  
  14.         Object[] object=invocation.getArguments();  
  15.         try   
  16.         {  
  17.             HttpServletRequest request = (HttpServletRequest) invocation.getArguments()[2 ];  
  18.             ActionMapping mapping=(ActionMapping) invocation.getArguments()[0 ];  
  19.             Users user = (Users) (request.getSession().getAttribute("user" ));  
  20.               
  21.             if (user== null )  
  22.             {  
  23.                  return  mapping.findForward( "login" );  
  24.           
  25.             }  
  26.             Object returnObject = invocation.proceed();  
  27.                         return  returnObject;  
  28.   
  29.         }  
  30.         catch (Exception e)  
  31.         {  
  32.               
  33.         }  
  34.           
  35.         return  object;  
  36.     }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值