Получить текущего вошедшего в систему пользователя (используя авторизацию ldap) - Java / Spring MVC / Hibernate (MSSQL) - PullRequest
0 голосов
/ 15 июня 2019

У меня есть веб-приложение на Java, использующее Spring MVC / Hibernate и MS SQL.В настоящее время пользователи могут проходить аутентификацию через свой LDAP-вход, однако мне нужны специальные страницы, на которых пользователь может просматривать только свой список задач (которые извлекаются из MS SQL). Это может показаться довольно простым, но на самом деле я впервые делаю это с помощью Spring иHibernate, поэтому я немного потерян!Также я смотрю на один и тот же код в течение нескольких дней и могу использовать некоторую помощь :)

Я использую Bootgrid для отображения их списка задач, относящихся к их идентификатору пользователя в MS SQL (база данных уже заполнена образцомданные), однако мне трудно пройти через UserId в выражении HQL или, по крайней мере, пытаюсь получить данные, которые относятся исключительно к этому конкретному пользователю.

Это код из моего файла sampleDataService.java:

/**
 * Get a List of active tasks 
 * @param searchPhrase a search phrase for the query
 * @param orderBy an order by phrase
 * @return List of {@link Case}
 */
@Transactional(readOnly = true)
public List<Inv> getMyTasks(String searchPhrase, String orderBy) {
    return hibernateDAO.getMyTasks(searchPhrase, orderBy);
}

Это код для моего файла sampleHibernateDAO.java:

/**
 * Get a List of active tasks
 * @param searchPhrase a search phrase for the query
 * @param orderBy an order by phrase
 * @return List of {@link task}
 */
@SuppressWarnings("unchecked")
public List<ex> getMyTasks(String searchPhrase, String orderBy) {

    if (searchPhrase == null) {
        searchPhrase = "";
    }

    if (orderBy == null) {
        orderBy = "";
    }


    String HQL = "from ex i where exists (from exUser u where userId = :userId and u.userId = i.userId)"
    + searchPhrase + orderBy;
    logger.debug("getMyTasks HQL=" + HQL);

    List<ex> list = sessionFactory.getCurrentSession()
    .createQuery(HQL)
    //.setParameter("userId", LoginBean.getRemoteUser(userId), IntegerType.INSTANCE)
    .list();

    if (list == null) {
        list = new ArrayList<Inv>();
    }

    return list;    
}

И это частьмоего кода в файле sampleController.java для этой конкретной вещи, которую я пытаюсь сделать:

@GetMapping(value = "/svc/sampleUser/{userId}", produces = { MediaType.APPLICATION_JSON_VALUE })
@ResponseBody
public Inv getMyTasksData(@PathVariable("userId") int userId, HttpServletRequest request) {
    LoginBean login = LoginBean.getLoginBean(request);
    ex example = dataService.getExampleByUserId(userId);


    if (login.isUserInRole("AdminUser")) {
        investigation.setUserId(login.getUserId());
        investigation.setEmployerId(login.getManager());
    }
     if (example == null) {
        example = new ex();
     }   
return example;

}
/**
 * Web service to produce a JSON data response to a query for 
 * the list of scheduled tasks
 * @return an JSON data containing a List of task records
 */
@PostMapping(value = "/svc/sampleUser/myTasks", produces = { MediaType.APPLICATION_JSON_VALUE })
@ResponseBody
public BootGridControl getMyTasks(HttpServletRequest request) {
    MyTasksGridControl grid = new MyTasksGridControl(request);
    LoginBean login = LoginBean.getLoginBean(request);


    if (login.isUserInRole("AdminUser", "SysAdmin")) {          
        List<ex> rows = dataService.getMyTasks(grid.getSearchPhrase(), grid.getOrderBy());
        grid.setRows(rows);
        grid.setTotal(rows.size());         
    }
        return grid;

}

}

(мне пришлось заменить реальные имена переменных / методов по соображениям конфиденциальностиПоэтому, если вы обнаружите несоответствия в именах переменных, извините. Мне просто нужно руководство по логике и, если возможно, рабочий пример того, чего я пытаюсь достичь. Пожалуйста, дайте мне знать, если мне нужно предоставить больше информации - любую помощьс благодарностью!

Также созданы все соответствующие классы DTO / Beans / Model и все другие компоненты этого приложения работают. Я просто не могу получить текущего зарегистрированного пользователя для проверки по столбцу базы данных MS SQL, чтобы увидетьесли их имя пользователя совпадает с userId.

RIght сейчас в bootgrid, я не получаю никаких результатов, и это, скорее всего, из-за полного получения userIdСью.Так что либо мое утверждение HQL неверно, либо все мое направление / подход отключены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...