1

私は個人的なプロジェクトで作業しており、Spring Web MVC と Spring Security 4、すべての注釈ベースの構成を使用しています。カスタムの UsernamePasswordAuthenticationFilter に到達することはありません。紛失しています。すでに検索していますが、解決できるので、誰かができれば助けてください, 私は非常に感謝しています, だからここに私のコードがあります

春の初期化

@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[]{"/"};
    }


}

セキュリティの初期化

@Order(2)
public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {

}

Spring Bean の宣言とコンテキスト関連のもの

@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;
    }

}

この SecurityContext クラスで何か間違ったことをしているとほぼ確信しています....

@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;
    }


}
4

0 に答える 0