记录一次因代理Controller产生的404问题
spring 3.2.4
为了给每一个controller配置一个拦截器链
import com.google.common.collect.Lists;
import org.aopalliance.intercept.MethodInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.TargetSource;
import org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; @Component
public class AutoProxyCreator extends AbstractAutoProxyCreator implements InitializingBean { /**
* 序列化版本号
*/
private static final long serialVersionUID = 1L;
/**
* 持有Spring应用上下文
*/
private volatile ApplicationContext context = null;
/**
* 日志打印
*/
private static Logger logger = LoggerFactory.getLogger(AutoProxyCreator.class); /**
* 拦截器链
*/
private List<String> intercaptorChainList = null; /**
* 实现自动代理
*/
@Override
protected Object[] getAdvicesAndAdvisorsForBean(Class<?> beanClass, String beanName, TargetSource targetSource) {
// 针对Controller和RequestMapping进行拦截
if (AnnotationUtils.findAnnotation(beanClass, Controller.class) != null || AnnotationUtils.findAnnotation(beanClass, RequestMapping.class) != null) {
if (intercaptorChainList == null) {
throw new RuntimeException("初始化拦截器链失败,异常中断程序!");
}
List<MethodInterceptor> methodInterceptorList = Lists.newArrayList();
for(String intercaptor : intercaptorChainList){
if(AnnotationUtils.findAnnotation(beanClass, ExceptedAuthValidate.class) != null ){
continue;
}
logger.info("开始为bean:\"{}\"配置拦截器链:\"{}\"", beanClass, intercaptor);
BeanFactory beanFactory = getBeanFactory();
MethodInterceptor methodInterceptor = (MethodInterceptor)beanFactory.getBean(intercaptor);
methodInterceptorList.add(methodInterceptor);
}
return methodInterceptorList.toArray();
}
return DO_NOT_PROXY;
} /**
* 初始化拦截器链
*/
@Override
public void afterPropertiesSet() throws Exception {
intercaptorChainList = Lists.newArrayList();
intercaptorChainList.add("userLoginInterceptor");
intercaptorChainList.add("paramValidateInterceptor");
} }
然后跑起来发现所有的controller都访问不了了

AbstractHandlerMethodMapping里打断点可以看到
被代理了之后,getType出来是代理类,代理类没有注解
被认为不是一个handler
但是普通的AOP却没有问题,还需要了解AOP和这种代理有什么区别



记录一次因代理Controller产生的404问题的更多相关文章
- springboot搭建环境访问Controller层返回404
如果启动成功,但是却访问不了你自己写的controller,报404错误,那么原因就是您写的controller没有被spring 容器扫描到 解决方案: spring boot 默认扫描您的类是 在 ...
- 记录下使用iis7代理node.js写的网站程序
昨天晚上一个学弟的紧急求救,说了自己接的单子做了一个网站,使用了自己熟悉的技术——node.js+mongdb,但当看到部署环境惊呆了,是 windows+sqlserver.这些都不是关键,关键是服 ...
- idea创建springmvc项目创部署成功,但访问controller层报错404
这个问题网上有很多解决问题,检查配置文件是否正确?controller注解是否扫描?项目启动是否成功等等. 访问报错404,而且后台也没错误,归根结底还是访问路径错了. 1.如图,idea配置tomc ...
- 记录一次MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
在部署到IIS7时,MVC3报了一个找不到资源的错误,文件肯定是有的,而且页面是肯定报错的,也就说内部运行错误了,而MVC把错误没有抛出来而已: 所以对症下药,发觉我的项目里面用了rexs进行多语言, ...
- springmvc 请求无法到达controller,出现404
今天在配置SpringMVC时,访问项目一直出现404,无法访问. 报错: The origin server did not find a current representation for th ...
- 记录一次 Nginx 配置 proxy_pass 后 返回404问题
一. Nginx 配置 proxy_pass 后 返回404问题 故障解决和定位 1.1. 问题 在一次生产涉及多次转发的配置中, 需求是下面的图: 在配置好了 proxy_pass 之后,请求 ww ...
- <mvc:default-servlet-handler/>导致controller失效,报404错误
最近在做ssm框架整合的一个小项目时,页面跳转一直有404错误,也没有报错提示.然后一步一步去找,终于发现是<mvc:default-servlet-handler/>的原因.如下图所示, ...
- spring请求到达controller但响应404
问题是这样的,前台发送请求的后台,后台的方法正常执行,将数据放在response.getWrite里,但在前台并没有展示数据.用浏览器的开发者工具看下请求,发现响应404. 最后网上查了查,sprin ...
- Java动态代理全面分析
代理模式 解说:给某一个对象提供一个代理,并由代理对象控制对原对象的引用: 代理模式需要以下几个角色: 1 主题:规定代理类和真实对象共同对外暴露的接口: 2 代理类:专门代理真实对象的类: 3 ...
随机推荐
- 国产 WEB UI 框架 (收费)-- Quick UI,Mini UI
国产 WEB UI 框架 (收费)-- Quick UI,Mini UI : http://www.uileader.com/ http://www.miniui.com/
- axios请求接口的踩坑之路
1.跨域问题除了前端安装插件还需要后端php设置,设置如下 Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, ...
- C# 基础之string[,] 和string[][]
昨天做项目时碰到一个问题,后台返回一张关系表,里面就两个字段,简化为A,B字段(1:N的关系),一个A对应多个B字段. 由于对于string[,] 和string[][] 的认识不到位,刚开始搞错了数 ...
- u3d摇杆
using UnityEngine; using System.Collections; public class JoystickController : MonoBehaviour { priva ...
- CF449C:Jzzhu and Apples
题意简述 给出正整数n,你要把1-n之间的正整数分成尽可能多组,使得每一组两个数的最大公约数大于1;输出能分成最多组的个数,并按任意顺序输出每组的两个数. 很妙的一道题. 首先我们考虑去处理每个质数的 ...
- button 去掉原生边框
button按钮触发 hover 时,自带边框会显示,尤其是 button 设置圆角时,如图: 解决办法: outline: 0;
- Zabbix3.2监控Windows的内存使用百分比并在内存使用率超过85%的时候触发报警
内存使用率key:vm.memory.size[pused]
- python操作三大主流数据库(11)redis的安装和简单使用
命令参考文档:http://www.redis.cn/topics/introduction.html 1.安装及配置官网https://redis.io中文网站:http://www.redis.c ...
- LabVIEW版本控制(转)
原文转自https://www.cnblogs.com/EltonLiang/p/7105034.html 在我们工作中,必然会遇到代码的多个版本问题,也必然会遇到版本控制问题.如果所在的公司具有良好 ...
- 关于socket.io获取客户端真实IP地址
1 前言 由于使用了CDN加速,导致了socket.handshake.address拿到值都是服务器的,而没有使用CDN加速时,可以拿到客户端真实IP. 2 代码 if(socket.handsha ...