【发布时间】:2016-04-04 00:29:40
【问题描述】:
这是一个spring(带有spring security)+java+maven在eclipse上的应用。提交注册表单时遇到以下错误。随后查看我的其余文件:
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");
}
}
我很抱歉放了很多东西。我已经尝试过解决与此类似的问题,但它没有锻炼。任何提示将不胜感激。提前致谢!
【问题讨论】:
-
尝试删除文件 AppInit 并重建您的应用程序!告诉我它是否有帮助!
-
@Mr.Arjun 我试过了,但问题没有解决。我想问题出在注册控制器的级别。不知何故,请求处理程序没有很好地定义。但我不知道该怎么做。此外,我找不到程序试图创建和实例化的“defaultHandlerBean”。谢谢!
标签: java maven spring-mvc servlets spring-security