我正在尝试通过令牌对用户进行身份验证,但是当我尝试自动连接一个用户时,我的服务AuthenticationTokenProcessingFilter会出现空指针异常。 由于自动有线服务为空 ,如何解决此问题?
AuthenticationTokenProcessingFilter
我的AuthenticationTokenProcessingFilter课
@ComponentScan(basePackages = {"com.marketplace"}) public class AuthenticationTokenProcessingFilter extends GenericFilterBean { @Autowired @Qualifier("myServices") private MyServices service; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { @SuppressWarnings("unchecked") Map<String, String[]> parms = request.getParameterMap(); if (parms.containsKey("token")) { try { String strToken = parms.get("token")[0]; // grab the first "token" parameter User user = service.getUserByToken(strToken); System.out.println("Token: " + strToken); DateTime dt = new DateTime(); DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); DateTime createdDate = fmt.parseDateTime(strToken); Minutes mins = Minutes.minutesBetween(createdDate, dt); if (user != null && mins.getMinutes() <= 30) { System.out.println("valid token found"); List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN")); UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getEmailId(), user.getPassword()); token.setDetails(new WebAuthenticationDetails((HttpServletRequest) request)); Authentication authentication = new UsernamePasswordAuthenticationToken(user.getEmailId(), user.getPassword(), authorities); //this.authenticationProvider.authenticate(token); SecurityContextHolder.getContext().setAuthentication(authentication); }else{ System.out.println("invalid token"); } } catch(Exception e) { e.printStackTrace(); } } else { System.out.println("no token found"); } // continue thru the filter chain chain.doFilter(request, response); } }
我尝试在我中添加以下内容 AppConfig
AppConfig
@Bean(name="myServices") public MyServices stockService() { return new MyServiceImpl(); }
我的AppConfig注释是
@Configuration @EnableWebMvc @ComponentScan(basePackages = "com.marketplace") public class AppConfig extends WebMvcConfigurerAdapter {
我只是通过添加使它起作用
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
我不确定为什么即使我尝试添加显式限定词也应该这样做。现在代码看起来像
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); @SuppressWarnings("unchecked") Map<String, String[]> parms = request.getParameterMap(); if (parms.containsKey("token")) {