[英]Error creating bean with name 'defaultServletHandlerMapping'
[英]Error creating bean with name 'defaultServletHandlerMapping
這是eclipse上的一個spring(帶有spring security)+ java + maven應用程序。 提交注冊表單時遇到以下錯誤。 隨后查看我的其余文件:
HTTP Status 500 - Request processing failed; nested exception is
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'defaultServletHandlerMapping' defined in class
org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration:
Bean instantiation via factory method failed; nested exception is
org.springframework.beans.BeanInstantiationException: Failed to instantiate
[org.springframework.web.servlet.HandlerMapping]:
Factory method 'defaultServletHandlerMapping'
threw exception; nested exception is java.lang.IllegalArgumentException:
A ServletContext is required to configure default servlet handling
我的文件:
AppInit
package com.myapp.config;
import org.springframework.security.web.context.*;
public class AppInit extends AbstractSecurityWebApplicationInitializer
}
MyApp配置文件:
package com.myapp.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import com.myapp.JDBC.EmailJDBC;
import com.myapp.JDBC.LastIdJDBC;
import com.myapp.JDBC.LoginJDBC;
import com.myapp.JDBC.PersonJDBC;
@EnableWebMvc //mvc:annotation-driven
@Configuration
@ComponentScan(basePackages ={ "com.myapp" })//, excludeFilters = {
//@Filter(type = FilterType.ANNOTATION, value = Configuration.class) })
public class myappConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Bean
public DriverManagerDataSource getDatasource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setPassword("1234567");
dataSource.setUrl("jdbc:mysql://localhost:3306/myapp");
dataSource.setUsername("root");
return dataSource;
}
@Bean
public LoginJDBC getLoginBean(){
LoginJDBC bean = new LoginJDBC();
bean.setDataSource(new myappConfig().getDatasource());
return bean;
}
@Bean
public PersonJDBC getPersonBean(){
PersonJDBC bean = new PersonJDBC();
bean.setDataSource(new myappConfig().getDatasource());
return bean;
}
@Bean
public EmailJDBC getEmailBean(){
EmailJDBC bean = new EmailJDBC();
bean.setDataSource(new myappConfig().getDatasource());
return bean;
}
@Bean
public LastIdJDBC getLastIdBean(){
LastIdJDBC bean = new LastIdJDBC();
bean.setDataSource(new myappConfig().getDatasource());
return bean;
}
}
WebInit文件:
package com.myapp.config;
import javax.servlet.Filter;
import org.springframework.core.annotation.Order;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class myappWebInit extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { myappConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/","/login", "/signuPerson","/regPerson","/regPersonSuccess" };
}
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { RootConfiguration.class };
}
@Override
protected Filter[] getServletFilters() {
return new Filter[] { new HiddenHttpMethodFilter() };
}
}
安全配置文件:
package com.myapp.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.*;
import org.springframework.security.web.csrf.CsrfTokenRepository;
import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
private CsrfTokenRepository csrfTokenRepository()
{
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setSessionAttributeName("_csrf");
return repository;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.csrfTokenRepository(csrfTokenRepository())
.and()
.authorizeRequests()
.antMatchers("/resources/**", "/signuPerson").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
//.failureUrl(authenticationFailureUrl)
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
我為提出很多東西而道歉。 我已經嘗試過解決類似這個問題但沒有鍛煉的問題。 任何提示都將非常感激。 提前致謝!
我通過解決此平台上類似問題的解決方案解決了這個問題。
我通過在myappconfig文件中放入以下注釋來排除掃描配置過濾器:
@EnableWebMvc
@Configuration
@ComponentScan(
basePackages ={ "com.myapp" },
excludeFilters = {
@Filter(type = FilterType.ANNOTATION, value = Configuration.class)
}
)
這樣做后,問題沒有解決。
然后我刪除了@EnableWebMvc
並輸入myappinit文件,問題解決了。
我的猜測是@EnableWebMvc
和@ComponentScan(basePackages ={ "com.myapp" }, excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = Configuration.class) })
不應該在同一個配置文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.