0

我无法在 中保留数据AuthenticationProvidercashierRepo.save(cashierDAO)正在抛出 nullPointerException.

@Component
public class TACoreAuthProvider implements AuthenticationProvider {

    UsernamePasswordAuthenticationToken userToken;

    @Autowired
    CashierDAOServiceImpl cashierRepo;

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        String username = authentication.getPrincipal().toString();
        String password = authentication.getCredentials().toString();

        Mono<LoginResponseDAO> loginResponseDAO = tacoreAuth(username, password);
        loginResponseDAO.subscribe(responseDAO->{
            System.out.print(responseDAO.toString());
            if(!responseDAO.getStatus().equalsIgnoreCase("success")){
                throw new BadCredentialsException("External system authentication failed");
            }
            responseDAO.getData().setUserName(username);
            CashierDAO cashierDAO = responseDAO.getData();
            cashierRepo.save(cashierDAO);
            
            Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
            grantedAuthorities.add(new SimpleGrantedAuthority(responseDAO.getData().getUser_category()));
            userToken = new UsernamePasswordAuthenticationToken(username, password, grantedAuthorities);

        });
4

1 回答 1

0

感谢大家,我已经能够找出问题所在。

@Bean
public static TACoreAuthProvider getAuthProvider(CashierDAOServiceImpl cashierDAOService){
        return new TACoreAuthProvider(cashierDAOService);
    }

在实现它的静态类“ApiWebSecurityConfigurationAdapter”之外声明,因为“TACoreAuthProvider”实例为空。

@EnableWebSecurity
public class SecurityConfig  {
    @Bean
public static TACoreAuthProvider getAuthProvider(CashierDAOServiceImpl cashierDAOService){
        return new TACoreAuthProvider(cashierDAOService);
    }

 @Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends 
    WebSecurityConfigurerAdapter{

    @Bean
    public CustomBasicAuthenticationEntryPoint getBasicAuthEntryPoint(){
        return new CustomBasicAuthenticationEntryPoint();
    }

    @Override
    protected void configure(HttpSecurity http)throws Exception{
        http.csrf().disable()
                //.addFilterAfter(new JWTAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
                .antMatcher("/api/**")
                .authorizeRequests().anyRequest().authenticated()
                .and()
                .httpBasic().authenticationEntryPoint(getBasicAuthEntryPoint())
                .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception
    {
        auth.authenticationProvider(getAuthProvider(cashierDAOService));

    }

}

下面的代码是工作版本

 @EnableWebSecurity
public class SecurityConfig  {

 @Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends 
    WebSecurityConfigurerAdapter{

    @Bean
public static TACoreAuthProvider getAuthProvider(CashierDAOServiceImpl cashierDAOService){
        return new TACoreAuthProvider(cashierDAOService);
    }

    @Bean
    public CustomBasicAuthenticationEntryPoint getBasicAuthEntryPoint(){
        return new CustomBasicAuthenticationEntryPoint();
    }

    @Override
    protected void configure(HttpSecurity http)throws Exception{
        http.csrf().disable()
                //.addFilterAfter(new JWTAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
                .antMatcher("/api/**")
                .authorizeRequests().anyRequest().authenticated()
                .and()
                .httpBasic().authenticationEntryPoint(getBasicAuthEntryPoint())
                .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception
    {
        auth.authenticationProvider(getAuthProvider(cashierDAOService));

    }

}

于 2020-10-13T06:14:56.420 回答