Java @Autowire在弹簧启动中失败
我试图在Spring boot应用程序中自动连接一个类。但是Spring并没有给出任何实例,它给出的是nullJava @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
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();
}
}