在spring mvc AOP+Shiro的项目中,在controller 方法上使用了shiro的权限注解@RequiresPermissions(":"),再用aop去拦截controller的返回值,结果导致加了controller不能访问!
AOP拦截类
@Component
@Aspect
public class ControllerResultAspect {
private static Logger logger = LoggerFactory.getLogger(ControllerResultAspect.class);
@AfterReturning(pointcut = "execution(* com.cmp.**.controller.*.*(..))", returning = "resultMap")
public void addResourceCacheableAdvice(JoinPoint joinpoint,Object resultMap) throws Throwable {
if(resultMap!=null && BeanUtil.isIncludeEntity(resultMap)){
logger.warn("MVC Contoller reutun value contains Entity "+joinpoint.getSignature().toString());
}
}
}
springmvc-servlet.xml配置文件
...
<bean class="com.kmp.platform.aop.ControllerResultAspect" />
<aop:aspectj-autoproxy proxy-target-class="true" />
...
访问WorkerController时报的异常信息
严重: Servlet.service() for servlet [springmvc] in context with path [] threw exception [No adapter for handler [com.kmp.worker.controller.WorkerController@25ea1606]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler] with root cause
javax.servlet.ServletException: No adapter for handler [com.cmp.worker.controller.WorkerController@25ea1606]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler
at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:1128)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:903)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
我花了一个礼拜,整合了下SpringMvc + Mybatis +Shiro +Redis的Demo项目。你可以看看。可以多多交流,我特别喜欢shiro!
http://www.sojson.com/shiro