理一理Spring MVC中使用AspectJ的异常

来源:互联网 发布:淘宝网包包 编辑:程序博客网 时间:2024/05/22 04:48

本文只作为异常的参考解决方法, 不表示该异常的唯一解决答案.以下是这些异常的环境(pom.xml):

    <properties>        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <maven.compiler.source>1.8</maven.compiler.source>        <maven.compiler.target>1.8</maven.compiler.target>        <!--spring framework-->        <spring-framework.version>3.2.17.RELEASE</spring-framework.version>        <!-- spring mvc data to json-->        <jackson.version>1.9.13</jackson.version>        <shiro.version>1.3.2</shiro.version>        <aspectj.version>1.8.10</aspectj.version>    </properties>

java.lang.IllegalStateException:
Expected raw type form of org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$Match

参考: 可能是Spring framework的版本与当前的AspectJ不兼容,去看Spring framework的依赖信息
spring-framework-github 明显上面的版本过高,现在项目跑的是AspectJ 1.8.6

java.lang.IllegalArgumentException:
Pointcut is not well-formed: expecting ‘identifier’ at character position 0

参考: pointcut表达式语法错误, aspectJ 会提示出错的位置

java.lang.IllegalArgumentException:
error at ::0 formal unbound in pointcut

参考: 参数从pointcut中无法获取.例如:

@Before(value="* net.a.b.web.controller.*Controller.*(..) && target(bean) && @annotation(strategyAnnotation)", argNames="bean,strategyAnnotation")

Shiro注解导致DispatcherServlet无视图返回
点什么都会出现404错误.

参考:项目名-servlet.xml(Spring MVC的配置默认命名规则),以下是shiro中关于注解的配置

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"/>    <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">    <property name="securityManager" ref="securityManager"/></bean>

试试将DefaultAdvisorAutoProxyCreator作以下修改

    <!-- shiro 控制器上的注解:RequiresRoles && RequiresPermissions -->    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">        <!-- 因自定义AspectJ拦截Controller-->        <property name="proxyTargetClass" value="true" />    </bean>