Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
原因:java.lang.AbstractMethodError:com.myapp.webapp.config.WebConfig$$EnhancerBySpringCGLIB$$b5f5a3c0.configureContentNegotiation_Java_Spring_Maven_Spring Mvc_Spring Security - Fatal编程技术网

原因:java.lang.AbstractMethodError:com.myapp.webapp.config.WebConfig$$EnhancerBySpringCGLIB$$b5f5a3c0.configureContentNegotiation

原因:java.lang.AbstractMethodError:com.myapp.webapp.config.WebConfig$$EnhancerBySpringCGLIB$$b5f5a3c0.configureContentNegotiation,java,spring,maven,spring-mvc,spring-security,Java,Spring,Maven,Spring Mvc,Spring Security,我有一个小项目,有hibernate+jpa,Spring,springmvc(没有SpringBoot)。现在我正在尝试添加springsecurity UserDetailsServiceImpl.class: public class UserDetailsServiceImpl implements UserDetailsService { @Autowired Service<Account> accountService; @Override

我有一个小项目,有
hibernate
+
jpa
Spring
springmvc
(没有
SpringBoot
)。现在我正在尝试添加
springsecurity

UserDetailsServiceImpl.class

public class UserDetailsServiceImpl implements UserDetailsService {
    @Autowired
    Service<Account> accountService;

    @Override
    public UserDetails loadUserByUsername(String mail) throws UsernameNotFoundException {
        Account account = new Account();
        account.setMail(mail);
        Account foundedAccount = accountService.readByObj(account);
        if (foundedAccount == null) {
            throw new UsernameNotFoundException("Account not found");
        }
        return new User(foundedAccount.getMail(), foundedAccount.getPassword()
                , true, true, true, true,
                Collections.singleton(new SimpleGrantedAuthority("ROLE_" + foundedAccount.getRole())));
    }
}
@EnableWebSecurity
@Configuration
@ComponentScan({"com.myapp.webapp.config"})
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/account/**").hasRole("USER")
                .and()

                .formLogin()
                .loginPage("/login").permitAll()
                .loginProcessingUrl("/login")
                .usernameParameter("mail")
                .passwordParameter("password")
                .and()

                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login")
                .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler())
                .invalidateHttpSession(true)
                .deleteCookies("mail", "password", "id")
                .and()

                .rememberMe()
                .rememberMeParameter("remember-me");
                //.

    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);

    }
}
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {


}
@EnableWebMvc
@Configuration
@ComponentScan({"com.myapp.service.config",
"com.myapp.webapp"
} )

public class WebConfig implements WebMvcConfigurer {

    private static final Logger logger = LoggerFactory.getLogger(AccountController.class);

    @Autowired
    EntityManagerFactory emf;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(accountInterceptor()).addPathPatterns("/account", "/editAccount", "/editSecurity", "/editMainInfo");
        registry.addWebRequestInterceptor(entityManagerInViewInterceptor()).addPathPatterns("/*");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources ").addResourceLocations("/resources/");
        registry.addResourceHandler("/WEB-INF/jsp ").addResourceLocations("/jsp/");
    }

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Bean
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver=new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        return resolver;
    }

    @Bean
    public UserDetailsService userDetailsService() {
        return new UserDetailsServiceImpl();
    }

    @Bean
    public UserValidationInterceptor accountInterceptor() {
        return new UserValidationInterceptor();
    }

    @Bean
    public OpenEntityManagerInViewInterceptor entityManagerInViewInterceptor() {
        OpenEntityManagerInViewInterceptor openEntityManagerInViewInterceptor = new OpenEntityManagerInViewInterceptor();
        openEntityManagerInViewInterceptor.setEntityManagerFactory(emf);
        return openEntityManagerInViewInterceptor;
    }


    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}
public class AppInit extends AbstractAnnotationConfigDispatcherServletInitializer{
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{
                WebConfig.class,
                SecurityConfig.class
        };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
       return new Class<?>[]{
                WebConfig.class
        };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
SecurityWebApplicationInitializer.class

public class UserDetailsServiceImpl implements UserDetailsService {
    @Autowired
    Service<Account> accountService;

    @Override
    public UserDetails loadUserByUsername(String mail) throws UsernameNotFoundException {
        Account account = new Account();
        account.setMail(mail);
        Account foundedAccount = accountService.readByObj(account);
        if (foundedAccount == null) {
            throw new UsernameNotFoundException("Account not found");
        }
        return new User(foundedAccount.getMail(), foundedAccount.getPassword()
                , true, true, true, true,
                Collections.singleton(new SimpleGrantedAuthority("ROLE_" + foundedAccount.getRole())));
    }
}
@EnableWebSecurity
@Configuration
@ComponentScan({"com.myapp.webapp.config"})
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/account/**").hasRole("USER")
                .and()

                .formLogin()
                .loginPage("/login").permitAll()
                .loginProcessingUrl("/login")
                .usernameParameter("mail")
                .passwordParameter("password")
                .and()

                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login")
                .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler())
                .invalidateHttpSession(true)
                .deleteCookies("mail", "password", "id")
                .and()

                .rememberMe()
                .rememberMeParameter("remember-me");
                //.

    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);

    }
}
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {


}
@EnableWebMvc
@Configuration
@ComponentScan({"com.myapp.service.config",
"com.myapp.webapp"
} )

public class WebConfig implements WebMvcConfigurer {

    private static final Logger logger = LoggerFactory.getLogger(AccountController.class);

    @Autowired
    EntityManagerFactory emf;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(accountInterceptor()).addPathPatterns("/account", "/editAccount", "/editSecurity", "/editMainInfo");
        registry.addWebRequestInterceptor(entityManagerInViewInterceptor()).addPathPatterns("/*");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources ").addResourceLocations("/resources/");
        registry.addResourceHandler("/WEB-INF/jsp ").addResourceLocations("/jsp/");
    }

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Bean
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver=new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        return resolver;
    }

    @Bean
    public UserDetailsService userDetailsService() {
        return new UserDetailsServiceImpl();
    }

    @Bean
    public UserValidationInterceptor accountInterceptor() {
        return new UserValidationInterceptor();
    }

    @Bean
    public OpenEntityManagerInViewInterceptor entityManagerInViewInterceptor() {
        OpenEntityManagerInViewInterceptor openEntityManagerInViewInterceptor = new OpenEntityManagerInViewInterceptor();
        openEntityManagerInViewInterceptor.setEntityManagerFactory(emf);
        return openEntityManagerInViewInterceptor;
    }


    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}
public class AppInit extends AbstractAnnotationConfigDispatcherServletInitializer{
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{
                WebConfig.class,
                SecurityConfig.class
        };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
       return new Class<?>[]{
                WebConfig.class
        };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
WebConfig.class

public class UserDetailsServiceImpl implements UserDetailsService {
    @Autowired
    Service<Account> accountService;

    @Override
    public UserDetails loadUserByUsername(String mail) throws UsernameNotFoundException {
        Account account = new Account();
        account.setMail(mail);
        Account foundedAccount = accountService.readByObj(account);
        if (foundedAccount == null) {
            throw new UsernameNotFoundException("Account not found");
        }
        return new User(foundedAccount.getMail(), foundedAccount.getPassword()
                , true, true, true, true,
                Collections.singleton(new SimpleGrantedAuthority("ROLE_" + foundedAccount.getRole())));
    }
}
@EnableWebSecurity
@Configuration
@ComponentScan({"com.myapp.webapp.config"})
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/account/**").hasRole("USER")
                .and()

                .formLogin()
                .loginPage("/login").permitAll()
                .loginProcessingUrl("/login")
                .usernameParameter("mail")
                .passwordParameter("password")
                .and()

                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login")
                .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler())
                .invalidateHttpSession(true)
                .deleteCookies("mail", "password", "id")
                .and()

                .rememberMe()
                .rememberMeParameter("remember-me");
                //.

    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);

    }
}
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {


}
@EnableWebMvc
@Configuration
@ComponentScan({"com.myapp.service.config",
"com.myapp.webapp"
} )

public class WebConfig implements WebMvcConfigurer {

    private static final Logger logger = LoggerFactory.getLogger(AccountController.class);

    @Autowired
    EntityManagerFactory emf;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(accountInterceptor()).addPathPatterns("/account", "/editAccount", "/editSecurity", "/editMainInfo");
        registry.addWebRequestInterceptor(entityManagerInViewInterceptor()).addPathPatterns("/*");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources ").addResourceLocations("/resources/");
        registry.addResourceHandler("/WEB-INF/jsp ").addResourceLocations("/jsp/");
    }

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Bean
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver=new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        return resolver;
    }

    @Bean
    public UserDetailsService userDetailsService() {
        return new UserDetailsServiceImpl();
    }

    @Bean
    public UserValidationInterceptor accountInterceptor() {
        return new UserValidationInterceptor();
    }

    @Bean
    public OpenEntityManagerInViewInterceptor entityManagerInViewInterceptor() {
        OpenEntityManagerInViewInterceptor openEntityManagerInViewInterceptor = new OpenEntityManagerInViewInterceptor();
        openEntityManagerInViewInterceptor.setEntityManagerFactory(emf);
        return openEntityManagerInViewInterceptor;
    }


    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}
public class AppInit extends AbstractAnnotationConfigDispatcherServletInitializer{
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{
                WebConfig.class,
                SecurityConfig.class
        };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
       return new Class<?>[]{
                WebConfig.class
        };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
AppInit.class

public class UserDetailsServiceImpl implements UserDetailsService {
    @Autowired
    Service<Account> accountService;

    @Override
    public UserDetails loadUserByUsername(String mail) throws UsernameNotFoundException {
        Account account = new Account();
        account.setMail(mail);
        Account foundedAccount = accountService.readByObj(account);
        if (foundedAccount == null) {
            throw new UsernameNotFoundException("Account not found");
        }
        return new User(foundedAccount.getMail(), foundedAccount.getPassword()
                , true, true, true, true,
                Collections.singleton(new SimpleGrantedAuthority("ROLE_" + foundedAccount.getRole())));
    }
}
@EnableWebSecurity
@Configuration
@ComponentScan({"com.myapp.webapp.config"})
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/account/**").hasRole("USER")
                .and()

                .formLogin()
                .loginPage("/login").permitAll()
                .loginProcessingUrl("/login")
                .usernameParameter("mail")
                .passwordParameter("password")
                .and()

                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login")
                .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler())
                .invalidateHttpSession(true)
                .deleteCookies("mail", "password", "id")
                .and()

                .rememberMe()
                .rememberMeParameter("remember-me");
                //.

    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);

    }
}
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {


}
@EnableWebMvc
@Configuration
@ComponentScan({"com.myapp.service.config",
"com.myapp.webapp"
} )

public class WebConfig implements WebMvcConfigurer {

    private static final Logger logger = LoggerFactory.getLogger(AccountController.class);

    @Autowired
    EntityManagerFactory emf;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(accountInterceptor()).addPathPatterns("/account", "/editAccount", "/editSecurity", "/editMainInfo");
        registry.addWebRequestInterceptor(entityManagerInViewInterceptor()).addPathPatterns("/*");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources ").addResourceLocations("/resources/");
        registry.addResourceHandler("/WEB-INF/jsp ").addResourceLocations("/jsp/");
    }

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Bean
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver=new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        return resolver;
    }

    @Bean
    public UserDetailsService userDetailsService() {
        return new UserDetailsServiceImpl();
    }

    @Bean
    public UserValidationInterceptor accountInterceptor() {
        return new UserValidationInterceptor();
    }

    @Bean
    public OpenEntityManagerInViewInterceptor entityManagerInViewInterceptor() {
        OpenEntityManagerInViewInterceptor openEntityManagerInViewInterceptor = new OpenEntityManagerInViewInterceptor();
        openEntityManagerInViewInterceptor.setEntityManagerFactory(emf);
        return openEntityManagerInViewInterceptor;
    }


    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}
public class AppInit extends AbstractAnnotationConfigDispatcherServletInitializer{
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{
                WebConfig.class,
                SecurityConfig.class
        };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
       return new Class<?>[]{
                WebConfig.class
        };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

1.在spring base项目中,最好将配置类导入WebConfig类,该类将扩展
WebMVCConfigureAdapter
webmvcconfigurationsupport

2.在ServletInitializer类中,将webConfig类作为根就足够了 配置类

public class AppInit extends AbstractAnnotationConfigDispatcherServletInitializer{
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{
                WebConfig.class
        };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
       return new Class<?>[]{

        };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

您是否尝试将SecurityConfig类导入WebConfig类?