当项目中存在2个以上IOC容器时,初始化security框架时会抛出异常
spring ioc父容器 扫描service...
springMVC ioc子容器 扫描controller...
这个异常主要在于哪一个ioc来扫描WebAppSecurityConfig类,
分析问题:
如果spring 扫描 :则Filter在spring ioc容器中
如果springMVC扫描:则Filter在springMVC 容器中
通常情况下使用security都是对请求做权限控制,所以不能由spring ioc容器来进行扫描,进而衍生出下面的异常
分析问题所在:
首先明确三组件加载顺序:
首先contextLoaderListener初始化 创建Spring IOC容器
WebApplicationContext wac = findWebApplicationContext(); //查找ioc容器
添加自己写的代码
// 获取servletContext对象
ServletContext sc = this.getServletContext();
// 拼接SpringMVC将IOC容器存入servletContext域的时候使用的属性名
String servletName = "dispatcherServlet";
String attrName = FrameworkServlet.SERVLET_CONTEXT_PREFIX+servletName;
WebApplicationContext wac = (WebApplicationContext)sc.getAttribute(attrName);
servletName 具体是什么值参照自己项目中web.xml中配置的dispatcherServlet的servlet-name名;
这时security环境初步搭建完成!
原文:https://www.cnblogs.com/myPrBB/p/12594515.html