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

【求助】Spring中的BeanNameAutoProxyCreator进行权限控制的棘手问题?

问题背景:本人在使用Struts+Spring+Hibernate进行毕业设计的系统开发,其中“发布悬赏视频任务帖”(对应Action:NewRewardAssignmentAction)这一操作只能够通过验证的企业会员(corpUser)才能够进行操作。我在使用spring AOP中的事务代理,就是用BeanNameAutoProxyCreator来进行拦截控制。

存在问题:当我在spring bean的配置文件(applicationContext.xml)中定义BeanNameAutoProxyCreator,并添加发布悬赏视频任务的拦截器后,所有Action竟然都罢工了?!……(表现:在登录页面提交后提示:HTTP Status 404 - Servlet action is not available

相关代码如下:
一、applicationContext.xml中的相关代码如下
<!-- 配置dataSource数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/dowe"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>

<!-- 配置Hibernate的SessionFactory Bean -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
<!--mappingResources属性用来列出全部PO映射文件 -->
<property name="mappingResources">
<list>
<value>com/dowe/pojo/User.hbm.xml</value>
<value>com/dowe/pojo/Note.hbm.xml</value>
</list>
</property>
</bean>
<!-- 定义事务管理器,使用适用于Hibernte的局部事务管理策略-->
<bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <!-- HibernateTransactionManager bean需要依赖注入一个SessionFactory bean的引用-->
  <property name="sessionFactory" ref="sessionFactory"/>
  <!-- 注意:下边这个属性一定不要少,把嵌套事务的开关打开-->
  <property name="nestedTransactionAllowed" value="true" />
</bean>
  <!--配置事务拦截器-->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <!--事务拦截器bean需要依赖注入一个事务管理器 -->
  <property name="transactionManager" ref="transactionManager"/>
  <property name="transactionAttributes">
  <!--下面定义事务传播属性-->
  <props>
  <prop key="get*">PROPAGATION_REQUIRED</prop>
  <prop key="*">PROPAGATION_REQUIRED</prop>
  </props>
  </property>
  </bean>
<!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此
没有id属性这个bean后处理器,根据事务拦截器为目标bean自动创建事务代理指定对满
足哪些bean name的bean自动生成业务代理 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 下面列出所有需要生成权限检查代理的控制器 -->
<property name="beanNames">
<list>
<value>adminService</value>
<value>userService</value>
</list>
</property>
<!-- 下面列出所有需要生成权限检查代理的控制器 -->
<property name="interceptorNames">
<list>