日期:2014-05-20  浏览次数:20695 次

shh(struts2)中我想用spring的AOP实现对每个action的每个方法的拦截,请问怎么实现?
通知类中主要是想判断session中是否有用户信息,以判断用户是否登录,如果大家有其它更好的办法也可以告诉我。
我现在主要问题是,如何让action走通知代理?在哪个配置文件中配置?


简单点说就是,用spring的aop拦截struts2的action如何做?
希望给个例子。

具体代码可以看这个帖子。
http://topic.csdn.net/u/20081230/09/bd65430f-5129-46d4-a2d0-9e8f15ea0ecc.html

无用的回答不给分,解决问题后,这两个帖子一起结,解决问题者至少100分。

------解决方案--------------------
下面是我写的简单例子,经测试可用!!
Java code

package test;

public interface LoginAction {

    public void execute();
}

------解决方案--------------------
这个可以直接用struts2的拦截器,我是这么用的:
struts.xml
XML code
<struts>
    <package name="authority-default" extends="struts-default">
         <interceptors>
             <interceptor  class="com.lan.baseproject.interceptor.AuthorityInterceptor" name="authority"/> 
            <interceptor-stack name="mydefault">
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <interceptor-ref name="authority"></interceptor-ref>
            </interceptor-stack>
         </interceptors>
         <default-interceptor-ref name="mydefault"/>
         <global-results>
            <result name="login" type="redirect">/login.jsp</result>
        </global-results>
    </package>
</struts>

------解决方案--------------------
我都是这么写:
Java code

<bean id="clientInter"
        class="cn.qdrk.strive.crm.interceptor.ClientInterceptor"
        abstract="false" lazy-init="default" autowire="default"
        dependency-check="default">
    </bean>
    
    <bean id="clientInfor"
        class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"
        abstract="false" lazy-init="default" autowire="default"
        dependency-check="default">
        <property name="beanNames">
        <list>
             <value>/undoBusiness</value>
             <value>/crminit</value>
             <value>/businesslist</value>
             <value>/cruxset</value>
             <value>/messagelist</value>    
        </list>
        </property>
        <property name="interceptorNames">
            <list>
            <value>clientInter</value>
            </list>        
        </property>
    </bean>

------解决方案--------------------
用filter校验session
------解决方案--------------------
2楼的struts2拦截器都用上了~~楼主说spring,呵呵

如此配置:
Java code
<bean id="serv" class="acpectJ.ServiceImp" />
    //老话题:实例的bean
    
    <bean id="aop" class="acpectJ.AopTest2" />
    //老话题:切面类
    
    <aop:config proxy-target-class="true">
        //与自动加载的<aop:aspectj-autoproxy />的proxy-target-class功能一样.,设置代理类型:jdk/GBlib
        
        <aop:aspect ref="aop">
            //很明显,aspect是切面的意思,你说人家要的的什么,这个也问,白痴啊~
            
            <aop:before pointcut="execution(* add())" method="testAfterReturning" />
            //pointcut,切点的意思,人家要的当然是切点表达式,
            //method,方法,要执行这个切点的方法,是哪个,记住我说的是切面类的方法;如果所有方法execution(* *());
            
        </aop:aspect>
    </aop:config>