当前位置: 首页 > 知识库问答 >
问题:

在某些情况下使用Spring IOException的AspectJ

宗政法
2023-03-14

对于我的AspectJ Spring应用程序,当我使用ProceedingJoinPoint作为参数时,或者当我试图从所有控制器例如hello.controllers.*中捕获时,我会得到一个I/O异常。但是,当我直接引用类并且只使用JointPoint而不是proceedingjointpoint时,就不会出现这种情况。

[2017-09-06 10:01:17,311]工件Daniel2:战争爆发:java.io.ioException:com.sun.enterprise.admin.remote.remoteFailureException:部署过程中发生错误:加载应用程序时出现异常:java.lang.illegalStateException:containerbase.addchild:start:org.apache.catalina.lifecyCleException:org.springframework.beans.factory.beanCreationException:创建ServletContext嵌套异常是org.springframework.beans.factory.beanCreationException:创建名为'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration'的bean时出错:bean实例化之前的BeanPostProcessor失败;嵌套异常是org.springframework.beans.factory.beanCreationException:创建名为“org.springframework.transaction.config.internalTransactionAdvisor”的bean时出错:在设置bean属性“transaction attributeSource”时,无法解析对bean“org.springframework.transaction.annotation.annotationTransactionAttributeSource#0”的引用;嵌套异常是org.springframework.beans.factory.beanCreationException:创建名为'org.springframework.transaction.annotation.annotationTransactionAttributeSource#0'的bean时出错:bean实例化失败前的BeanPostProcessor;嵌套异常是java.lang.IllegalArgumentException:ProceedingJoinPoint只支持around建议。有关更多详细信息,请参阅server.log。

我的AspectJ文件

@Aspect
public class XSSAspect {
    @Around(value = "execution(* hello.controllers.*(..))")
    public void before(final ProceedingJoinPoint joinPoint) throws Throwable {
        Object[] arguments = joinPoint.getArgs();
        for (int i = 0; i < arguments.length; i++) {
            if (arguments[i] instanceof String) {
                String s = (String) arguments[i];
                s = "testing";
                arguments[i] = s;
            }
        }

        joinPoint.proceed(arguments);
    }
}

调度程序servlet

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
                    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
                    http://www.springframework.org/schema/tx
                    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
       xmlns:tx="http://www.springframework.org/schema/tx">

    <aop:aspectj-autoproxy />
    <bean id="xssAspect" class="hello.aspect.XSSAspect" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/jsp/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>
    <bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="hello" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            </props>
        </property>
    </bean>
    <bean id="transactionManager"
          class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="268435456"/>
    </bean>

    <bean id="freeMarkerConfigurationFactory"  init-method="createConfiguration"
          class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
        <property name="templateLoaderPath" value="classpath:/freemarker"/>
        <property name="preferFileSystemAccess" value="false"/>
    </bean>

    <bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/*******" />
        <property name="username" value="root" />
        <property name="password" value="*********" />
    </bean>


    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="smtp.gmail.com"/>
        <property name="port" value="25"/>
        <property name="username" value="**********"/>
        <property name="password" value="********"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.transport.protocol">smtp</prop>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.debug">true</prop>
            </props>
        </property>
    </bean>
    <bean id="TaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="5" />
        <property name="maxPoolSize" value="10" />
        <property name="queueCapacity" value="25" />
        <property name="daemon" value="true" />
    </bean>

    <bean id="persistenceExceptionTranslationPostProcessor"
          class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>


    <bean name="VehicleDao" class="hello.dao.VehicleDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean name="ModelDao" class="hello.dao.ModelDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean name="ManufactureDao" class="hello.dao.ManufactureDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean name="UserDao" class="hello.dao.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean name="CurrencyDao" class="hello.dao.CurrencyDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean name="ProposalDao" class="hello.dao.ProposalDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean name="AcceptedProposalDao" class="hello.dao.AcceptedProposalDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean name="ManufactureModelDao" class="hello.dao.ManufactureModelDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean name="UploadDao" class="hello.dao.UploadDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <bean name="VehicleService" class="hello.services.VehicleServiceImpl">
        <property name="vehicleDao" ref="VehicleDao" />
        <property name="manufactureModelDao" ref="ManufactureModelDao" />
    </bean>
    <bean name="UserService" class="hello.services.UserServiceImpl">
        <property name="userDao" ref="UserDao" />
    </bean>
    <bean name="CurrencyService" class="hello.services.CurrencyServiceImpl">
    </bean>
    <bean name="ManufactureService" class="hello.services.ManufactureServiceImpl">
    </bean>
    <bean name="ProposalService" class="hello.services.ProposalServiceImpl">
        <property name="proposalDao" ref="ProposalDao"></property>
        <property name="acceptedProposalDao" ref="AcceptedProposalDao"></property>
    </bean>
    <bean name="ModelService" class="hello.services.ModelServiceImpl">
    </bean>
    <bean name="EmailService" class="hello.services.EmailServiceImpl">
        <property name="taskExecutor" ref="TaskExecutor" />
    </bean>
    <bean name="UploadService" class="hello.services.StandardUploadService">
    </bean>
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="messages" />
    </bean>

    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="en" />
    </bean>


    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**" />
            <bean id="localeChangeInterceptor"
                  class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
                <property name="paramName" value="lang" />
            </bean>
        </mvc:interceptor>
    </mvc:interceptors>

    <context:component-scan base-package="hello" />
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <mvc:annotation-driven  />
    <context:annotation-config />
</beans>
package hello.controllers;

import hello.api.APIResponse;
import hello.api.UploadAPIResponse;
import hello.aspect.AntiJavascript;
import hello.models.Upload;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class MessageAPIController extends APIController {
    @RequestMapping(value="/message", method = RequestMethod.GET)
    public String showMessage(String message, ModelMap model) throws Exception {
         model.addAttribute("message", message);
        return new String("message");
    }
}

我已经与这个问题斗争了几个小时,并希望任何洞察力。谢谢你。

共有1个答案

乌甫
2023-03-14

1.从异常堆栈的最后一句话中,我们可以找到原因,“ProceedingJoinPoint只支持around建议。请参阅server.log了解更多细节。”

2.“ProcedingJoinPoint”只能与“@around”一起使用,但您可以与“@before”一起使用。

 类似资料:
  • 问题内容: 鉴于以下课程 当我们验证它(例如,使用@Valid)并且如果Website.url不遵守我的自定义@ValidUrl约束时,我们将遇到约束冲突(例如,“ URL不可访问”)。 我想知道如果用户愿意,是否可以忽略该验证。 脚步: 第一次验证表格 引发约束冲突并将其显示给用户 用户选择“我知道,仍然添加”,然后重新提交 第二次验证表单,验证@ValidUrl以外的所有内容 问题答案: 您可

  • 问题内容: 我想创建一个触发器,以防止在出生日期(列之一)将来的时候插入。我有这个: 如何取消if语句中的插入? 问题答案: 基于这一点,我不确定是否可以这样做。 MySQL当前的触发器实现中不支持自愿引发异常并中止生成触发器的语句。 我发现的解决方法是编写一个BEFORE触发器,以将表中的not-NULL列之一设置为NULL,从而违反了其NOT NULL约束。这导致产生触发器的语句被中止。

  • 我遇到了一个非常奇怪的问题,java线程正忙着等待。 我有一个线程忙于等待其他线程的静态变量的状态。假设忙碌等待的线程正在等待另一个线程的静态int变量达到某个值 如果我使用上面的代码,线程将被卡在忙等待中,不会跳出while循环,即使确实达到5。 但是,如果我使用其他代码,那么线程确实会跳出忙等待循环。有时,一旦达到5,其他时候会晚一点。但它会发生。对于我的特定示例,我将其用作“无意义的工作”

  • 如果噪声对连续信道符号的影响是独立的,则可以用一组转换概率来描述。此概率就是发送符号i,收到符号j的概率。最大信道速率可用下式的最大值给出: 其中,我们改变,但保持。由拉格朗日方法可得到以下方程, 。 乘以,并针对s求得,可以证明。设的逆(如果存在的话)为,使得。则: 。 因此, 。 或: 。 这就是用于确定最大值的方程组,其中需要确定C,使得。在完成这一工作后,C为信道容量,是实现这一容量的信道

  • 问题内容: 我使用 CMake* (3.4.1)根据 Boost 库构建一个C ++项目。宿主平台是 Linux ,目标是宿主和 交叉构建 Android NDK。 * 我只使用Boost头文件,而我只是下载/提取了boost文件夹(并且我没有目录)。 在我的文件中,我这样声明对Boost的依赖关系: 我将构建配置如下: 这实际上 可以 像我的 本机 版本一样工作。 现在,当我以完全相同的方式(仅

  • 我知道拥有一个空的类通常是一个设计缺陷,但是在我的情况下,它是否是最好的选择,或者对于这个Scnario来说,什么是最好的设计呢? ClassA是一个空的超类这里是我的代码 ClassB是从ClassA派生的

  • 问题内容: 我已经在带有Selenium和PhantomJS的Python中设置了一个简单的webscraping脚本。我总共要抓取大约200个URL。脚本最初运行良好,然后运行了大约20-30个URL(它可能会更多/更少,因为它失败时似乎是随机的,并且与任何特定的URL不相关),我在python中收到以下错误: 还有我的ghostdriver.log: 我进行了搜索,关于SO的大多数问题似乎都是

  • 本文向大家介绍在某些情况下如何更改R数据帧中的列?,包括了在某些情况下如何更改R数据帧中的列?的使用技巧和注意事项,需要的朋友参考一下 有时,特定列的列值与另一列有某种关系,我们可能需要根据某些条件来更改该特定列的值。我们需要进行此更改,以检查列值的更改如何对所考虑的两个列之间的关系产生影响。在R中,我们可以使用单个方括号来更改列值。 示例 请看以下数据帧- 假设我们想从第2列(x2)值中减去2,