这是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");
}
}
我为提出很多东西而道歉。我已经尝试过解决类似这个问题但没有锻炼的问题。任何提示都将非常感激。提前谢谢!
答案 0 :(得分:4)
我在这个平台上解决类似问题的解决方案帮助解决了这个问题。
我通过在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) })
不应该在同一个配置文件中。