Как я могу получить Authentication (). GetPrincipal () в методе Schedule? - Весенний ботинок - PullRequest
0 голосов
/ 08 октября 2019

Я хочу запустить метод расписания, и в этом методе мне нужно использовать информацию о пользователе, вошедшего в систему. Однако, когда я запускаю getPrincipal (), мой код получает nullPointException

@Component
public class Import extends WebSecurityConfigurerAdapter {
    @Autowired
    private ActivityRepository activityRepository;

    @Scheduled(fixedRate = 300000)
    public void importActivities() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        Principal principal = (Principal) authentication.getPrincipal();
        List<Activity> lastActivity = activityRepository.findFirstByOrderByStartDateDesc();

        int lastEpoch = 0;
        if (lastActivity.isEmpty() == false) {
            lastEpoch = (int) (lastActivity.get(0).getStartDate().getTime() / 1000);
        }
        System.out.println(lastEpoch);
        final RestTemplate restTemplate = new RestTemplate();

        final HttpHeaders headers = new HttpHeaders();
        headers.setBearerAuth(getAccessToken(principal));
        final HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
        ResponseEntity<List<Activity>> rateResponse = restTemplate.exchange(
                "https://www.strava.com/api/v3/athlete/activities?after=" + lastEpoch, HttpMethod.GET, entity,
                new ParameterizedTypeReference<List<Activity>>() {
                });
        List<Activity> activities = rateResponse.getBody();

        activityRepository.saveAll(activities);
    }

    private String getAccessToken(final Principal principal) {

        final OAuth2Authentication oauth2Auth = (OAuth2Authentication) principal;
        final OAuth2AuthenticationDetails oauth2AuthDetails = (OAuth2AuthenticationDetails) oauth2Auth.getDetails();

        return oauth2AuthDetails.getTokenValue();
    }

}

Спасибо

...