Использование loadUserByUsername (принципала безопасности загрузки Spring.getName()) в качестве параметра в собственном запросе sql возвращает нулевой указатель?
Используя loadUserByUsername в качестве параметра в собственном запросе sql, все, что я пытаюсь, возвращает нулевой указатель.
Есть ли какой-то способ получить значение одного сопоставления запроса внутри другого сопоставления запроса?
У меня есть таблица результатов, но она должна быть отфильтрована, чтобы показать только результаты для региона авторизованных пользователей.
ResultsRepository
public interface ResultsRepository extends JpaRepository<Results, Long> {
@Query(value ="SELECT RESULTS.LEAGUE, RESULTS.HOMETEAM,RESULTS.AWAYTEAM, RESULTS.RESULTSDATE "
+ "FROM RESULTS INNER JOIN LEAGUELOCATIONS ON RESULTS.LOCATION=LEAGUELOCATIONS.LOCATION "
+ "WHERE LEAGUELOCATIONS.LOCATION=(SELECT LOCATION FROM USERLOCATIONS WHERE USERNAME= :username)", nativeQuery = true)
List<Results> findByLocation(@Param("username") String username);
}
Контроллер результатов
@RestController
@RequestMapping(value = "/api")
public class ResultsController {
@Autowired
private ResultsRepository ResultsRepository;
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String loggedUsername = auth.getName();
@RequestMapping(value = "/result", method = RequestMethod.GET)
public List<Results> Results() {
//return ResultsRepository.findAll();
return ResultsRepository.findByLocation(bla);
}}
У меня есть служба пользователя для предоставления учетных данных пользователя из базы данных:
@Service
public class AppUserDetailsService implements UserDetailsService {
@Autowired
AppUserRepository appUserRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
AppUser appUser = appUserRepository.findOneByUsername(username);
if (appUser == null) {
throw new UsernameNotFoundException(username);
}
return appUser;
}
}
У меня также есть страница для пользователей, обновляющая там детали, меняющие местоположение, откуда они получают результаты и т. Д. На этой странице получение зарегистрированного пользователя работает через использование
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String loggedUsername = auth.getName();
Или в полном отображении как так:
/**
* Web service for getting all the appUsers in the application.
* @return list of all AppUser
*/
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<AppUser> users() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String loggedUsername = auth.getName();
System.out.println(loggedUsername);
return appUserRepository.findAll();
}
Я предполагаю, что это как-то связано с тем фактом, что я использую List, а не List, но я не могу найти, как заставить отображаться зарегистрированного пользователя приложения.
ОШИБКИ:
Constructor threw exception; nested exception is java.lang.NullPointerException
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate
Caused by: java.lang.NullPointerException: null