Java @Autowire在弹簧启动中失败

Java @Autowire在弹簧启动中失败,java,spring,spring-boot,Java,Spring,Spring Boot,我试图在Spring boot应用程序中自动连接一个类。但是Spring并没有给出任何实例,它给出的是null public class JWTAuthorizationFilter extends BasicAuthenticationFilter { public JWTAuthorizationFilter( AuthenticationManager authManager ) { super(authManager); } @Autowired private JWTUti

我试图在Spring boot应用程序中自动连接一个类。但是Spring并没有给出任何实例,它给出的是null

public class JWTAuthorizationFilter extends BasicAuthenticationFilter {

public JWTAuthorizationFilter( AuthenticationManager authManager )
{
    super(authManager);
}

@Autowired
private JWTUtil jwtUtil;
@Override
protected void doFilterInternal( HttpServletRequest req, HttpServletResponse res, FilterChain chain )
        throws IOException, ServletException
{
    String jwt = req.getHeader(SecurityConstants.HEADER_STRING);

    if( jwt == null || !jwt.startsWith(SecurityConstants.TOKEN_PREFIX)  )
    {
        chain.doFilter(req, res);
        return;
    }
    if(!jwtUtil.validateToken(jwt))
    {
        chain.doFilter(req, res);
        return;
    }

    UsernamePasswordAuthenticationToken authentication = getAuthentication(req);

    SecurityContextHolder.getContext().setAuthentication(authentication);
    chain.doFilter(req, res);
}
}
JWTUtil JWTUtil
正在获取空值。我已经用
@Component
注释标记了
JWTUtil.java
,但它仍然不起作用

@Component
public class JWTUtil {

private static final Logger logger = LoggerFactory.getLogger(JWTUtil.class);
@Autowired
private  UserModelRepository userModelRepository;

public  Boolean validateToken( String jwt )
{
    Claims claims = Jwts.parser().setSigningKey(SecurityConstants.SECRET)
            .parseClaimsJws(jwt.replace(SecurityConstants.TOKEN_PREFIX, "")).getBody();

    Date createdAt = claims.getIssuedAt();
    String mobileNumber = claims.getSubject();

    Optional<UserModel> userModelOptional = userModelRepository.findByMobileNumberAndIsActiveTrue(mobileNumber);
    if( !userModelOptional.isPresent() )
    {
        return false;
    }
    UserModel userModel = userModelOptional.get();
    Calendar logoutTime = userModel.getLogoutTime();
    if( null != logoutTime )
    {
        Date logoutDate = logoutTime.getTime();
        if( logoutDate.before(createdAt) ) // new token
        {
            return true;
        }
    }
    logger.info("Invalid token....issued before last logout");
    return false;

}
}

自动连接字段不能为
null
只有在Spring范围之外创建bean实例时,它们才能为null。所以,让我猜您正在Spring安全配置的
http
方法中执行
new JWTAuthorizationFilter
。尝试在JWTAuthorizationFilterIt的一个Util类中添加@Component,对吗?使方法成为静态的。不要注射。它是ugly@NicoVanBelle我做到了。但我无法自动连线
@Autowired private UserModelRepository UserModelRepository在那case@M.Deinum你说得对,我在Spring安全配置的
http
方法中使用了
new JWTAuthorizationFilter
。我现在该怎么办?自动连接字段不能为
null
只有在Spring范围之外创建bean实例时,它们才能为null。所以,让我猜您正在Spring安全配置的
http
方法中执行
new JWTAuthorizationFilter
。尝试在JWTAuthorizationFilterIt的一个Util类中添加@Component,对吗?使方法成为静态的。不要注射。它是ugly@NicoVanBelle我做到了。但我无法自动连线
@Autowired private UserModelRepository UserModelRepository在那case@M.Deinum你说得对,我在Spring安全配置的
http
方法中使用了
new JWTAuthorizationFilter
。我现在该怎么办?
@SpringBootApplication
@EnableAutoConfiguration
@EntityScan( "com.highpeak.gbi.datastore.model" )
@EnableJpaRepositories( "com.highpeak.gbi.datastore.repository" )
@ComponentScan( { "com.highpeak.gbi.webservices",     "com.highpeak.gbi.datastore" } )
public class Application {

public static void main( String[] args )
{

    SpringApplication.run(Application.class, args);
}

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

}