1

i am working in a personal project and i using spring web mvc and spring security 4, all annotation based configs, and my custom UsernamePasswordAuthenticationFilter is never reached, i am losing it, i already search but i can get it solved, so if anyone could help, i 'd be very grateful, So here is my code

Spring Initialization

@Order(1)
public class SpringMvcInitializer  extends AbstractAnnotationConfigDispatcherServletInitializer  {

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

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

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


}

Security Initialization

@Order(2)
public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {

}

Spring beans declarations and context stuff

@EnableWebMvc
@Configuration
@ComponentScan({"app","server"})
@Import({ SecurityContext.class })
public class AppConfig extends WebMvcConfigurerAdapter {

    @Override   
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
           registry.addResourceHandler("/resources/**").addResourceLocations("/META-INF/resources/");
      }
    @Bean
    public InternalResourceViewResolver viewResolver(){
        InternalResourceViewResolver resolver = new  InternalResourceViewResolver();
        resolver.setSuffix(".jsp");
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setContentType("text/html; charset=UTF-8");
        resolver.setViewClass(JstlView.class);
        return resolver;
    }
    @Bean
    public DriverManagerDataSource dataSource(){
        DriverManagerDataSource driver = new DriverManagerDataSource();
        driver.setDriverClassName("com.mysql.jdbc.Driver");
        driver.setUrl("jdbc:mysql://localhost:3306/dberp-1");
        driver.setUsername("root");
        driver.setPassword("123456");
        return driver;
    }
    @Bean
    public LocalSessionFactoryBean sessionFactory(){
        LocalSessionFactoryBean session = new LocalSessionFactoryBean();
        session.setDataSource(dataSource());
        String[] pakages = {"model"};
        session.setPackagesToScan(pakages);
        Properties prop = new Properties();
        prop.put("dialect", MySQLDialect.class);
        session.setHibernateProperties(prop);
        return session;
    }

}

I am almost sure i am doing something wrong in this SecurityContext class....

@Configuration
@EnableWebSecurity
public class SecurityContext extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity  http) throws Exception{
        http
            .exceptionHandling()
                 .authenticationEntryPoint(authenticationEntryPoint())
                 .and()
            .addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class) 
            .authorizeRequests()
                 .antMatchers("/login","/resources/**").anonymous()
                 .antMatchers("/users").hasAuthority("admin")
                 .antMatchers("/**").hasAnyAuthority("employee","admin")
                 .and()
             .logout()
                .logoutSuccessUrl("/login")
                .invalidateHttpSession(true)
                .logoutUrl("/logout")
                .and()
             .csrf().disable();

    }

    @Bean   
    public AuthenticationEntryPoint authenticationEntryPoint(){
        AuthenticationEntryPoint entryAuth = new LoginUrlAuthenticationEntryPoint("/login");

        return entryAuth;
    } 
    @Bean(name="customAuthenticationManager")
    @Override
    protected AuthenticationManager authenticationManager() throws Exception {
        AuthenticationManager authManager = new CustomAuthenticationManager();
        return authManager;
    };
    @Bean
    public UsernamePasswordAuthenticationFilter authenticationFilter() throws Exception{
        /*UsernamePasswordAuthenticationFilter authFilter = new UsernamePasswordAuthenticationFilter();
        authFilter.setAuthenticationManager(authenticationManager());
        authFilter.setAuthenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler("/home"));
        authFilter.setAuthenticationFailureHandler(new SimpleUrlAuthenticationFailureHandler("/login?error"));*/
        UsernamePasswordAuthenticationFilter authFilter = new AuthFilter();
        authFilter.setAuthenticationManager(authenticationManager());
        authFilter.setAuthenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler("/home"));
        authFilter.setAuthenticationFailureHandler(new SimpleUrlAuthenticationFailureHandler("/login?error"));
        authFilter.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/login", "POST"));

        return authFilter;
    }


}

0 Answers0