Sto tentando di autenticare l'utente tramite token, ma quando provo a collegare automaticamente uno dei miei servizi all'interno dello AuthenticationTokenProcessingFilter
ottengo un'eccezione di puntatore nullo. perché il servizio autowired è nullo, come posso risolvere questo problema?Impossibile attivare automaticamente il servizio nel mio filtro di autenticazione in primavera
mio AuthenticationTokenProcessingFilter
classe
@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);
}
}
Ho provato ad aggiungere follwing nelle mie annotazioni AppConfig
@Bean(name="myServices")
public MyServices stockService() {
return new MyServiceImpl();
}
mio AppConfig sono
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.marketplace")
public class AppConfig extends WebMvcConfigurerAdapter {
è il tuo bean '' 'MyServices''' creato quando si guardano i registri? Potresti provare ad aggiungere '' '@ Component''' al tuo' '' MyServices''' –
Sì, ho provato ad aggiungere @ComponentScan e il servizio è stato creato! –
La classe AppConfig ha annotazioni '@ Configurazione'? –