如何避免在spring安全配置中重复UserDetails服务相关bean
我将SpringMVC与java配置和SpringSecurity一起使用 我已经将如何避免在spring安全配置中重复UserDetails服务相关bean,spring,spring-mvc,spring-security,Spring,Spring Mvc,Spring Security,我将SpringMVC与java配置和SpringSecurity一起使用 我已经将SecurityConfig.class放入rootContext中 public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{ @Override protected Class<?>[] getRootConfigClasses() { return new Cl
SecurityConfig.class
放入rootContext
中
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SecurityConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
然而,这些UserDao
和SessionFactory
在servletContext中也是需要的,而它们又是通过WebConfig.class
创建的
最后,这些bean被复制并出现在rootContext
和servletContext
中
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SecurityConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
我怎样才能防止呢
servletContext
可以从rootContext
访问bean,因此无需再次扫描它们。是的,我知道,但是@ComponentScan接受包和userdetails服务以及其他服务位于同一个包中。因此,我是否需要将它们拆分为单独的包,以便排除在servletContext
中?服务等应该由rootContext
加载,而不是servletContext
加载。servlet上下文应该只加载与web相关的东西,比如控制器。你可以使用include和exclude过滤器。我想念spring文档中的建议或最佳实践,你能给我指一下这个实践的参考吗?有一些提示。servletContext
可以从rootContext
访问bean,因此无需再次扫描它们。是的,我知道,但是@ComponentScan接受包和userdetails服务以及其他服务在同一个包中。因此,我是否需要将它们拆分为单独的包,以便排除在servletContext
中?服务等应该由rootContext
加载,而不是servletContext
加载。servlet上下文应该只加载与web相关的东西,比如控制器。你可以使用include和exclude过滤器。我想念spring文档中的建议或最佳实践,你能给我指一下这个实践的参考吗?有一些提示。