Ответы пользователя по тегу Java
  • Как правильно задать структуру класса для json объекта?

    AlexZaharow
    @AlexZaharow
    Программист.
    Как вариант - всё делать массивами, а перед загрузкой JSON проверить, если объект не массив, то объявить массив и загрузить одиночный объект в него.
    Если раньше было так:
    {
       "12:30": {
             name: "someName",
             lastName: "someLastName"
          }
    }

    А теперь и так и так:
    {
       "12:30": {
             name: "someName",
             lastName: "someLastName"
       },
       "13:15": [
           {
             name: "someName3",
             lastName: "someLastName3"
          },
          {
             name: "someName4",
             lastName: "someLastName4"
          }
       ]
    }
    , то конвертите всё в массив, а только потом применяйте:
    {
       "12:30": [
       {
             name: "someName",
             lastName: "someLastName"
       },
       ],
       "13:15": [
           {
             name: "someName3",
             lastName: "someLastName3"
          },
          {
             name: "someName4",
             lastName: "someLastName4"
          }
       ]
    }
    Ответ написан
  • Стоит ли изучать старые технологии?

    AlexZaharow
    @AlexZaharow
    Программист.
    Особенно пугает куча конфигураций через xml
    Это потому что вы сами не писали конфигураций ))). XML/JSON, иногда ini. Больше ничего по сути и нет.
    Ответ написан
  • Как развернуть war-файл на сервере Tomcat 8.5 в Linux?

    AlexZaharow
    @AlexZaharow
    Программист.
    Проверьте разрешения. Если tomcat не может прочитать файл, то он и распаковать его не сможет.
    Ответ написан
  • Ввод данных из текстового документа Java, можно ли как-то упростить?

    AlexZaharow
    @AlexZaharow
    Программист.
    У вас в файле не число 10, а строка "10". Вот пример преобразования: https://stackoverflow.com/questions/5585779/how-to...
    Как парить строку на токены - отдельная задача. Можно вручную, можно регулярными выражениями.

    48 и 47. Почему так происходит, до сих пор не разобрался

    Гляньте таблицу ASCII кодов, найдите там коды для символов 1 и 0 и станет понятно.
    Ответ написан
  • Приготовление сервера для разработки на JAVA?

    AlexZaharow
    @AlexZaharow
    Программист.
    Позвольте мне посоветовать вам обратить большее внимание на параметризацию настроек вашего web-приложения, чтобы его можно было просто портировать на новый сервер. Например, вынести настройки подключения к БД (connection string) наружу от web приложения. Да и вообще описание внешних ресурсов, которые нужны программе, тоже неплохо хранить вне приложения.
    Ответ написан
  • Где можно практиковаться в программирование на С++ и Java?

    AlexZaharow
    @AlexZaharow
    Программист.
    Я не поклонник А. Лебедева, но иногда он говорит правильные вещи. Например, по поводу "Вышлете мне тестовое задание?" Он говорит - "а придумайте его сами!" Так и вообще с задачами. Нужно увидеть задачу. Точнее увидеть, как с помощью программирования вы можете перевести проблему из некоторого нерешённого состояния в решённое. В жизни задача никогда не скажет вам, что "вот она я, задача" и добровольно отдаст своё решение.
    Когда я занимался легкой атлетикой, то думал, что есть два состояния, одно, когда я тренируюсь, а второе, когда я выступаю. Тренер мне объяснил, что состояние только одно - тренировка. Только на соревнованиях выкладываешься больше. Это вообще изменило моё отношение к поиску задач.
    Если вы считаете, что способны решить задачу, то разве вы не способны её придумать? Каждая задача - это проверка своих возможностей, вызов. Если вы не работаете над решением задачи в таком ключе, значит вы неправильно и занимаетесь и работаете, т.к. нет развития.
    Ответ написан
  • Как создать исполняемый файл с использованием maven java project в Intellij idea и конечно же selenium и testng?

    AlexZaharow
    @AlexZaharow
    Программист.
    Надо использовать package, не install:

    52ad3bc62cb64d229bf0813c52141d48.png


    5ccebcd6e6494895a11388bfb7cd8151.png

    install выполняется после того, как пакет собран. Install кладёт файл в локальный репозиторий.
    Ответ написан
  • Как реализовать взаимодействие Angular и Java?

    AlexZaharow
    @AlexZaharow
    Программист.
    >> Я читал, что Angular используется только для одностраничников
    Ну это как сделаете. Там имеется в виду, что можно сделать одностраничный сайт, т.к. все операции можно делать через ajax, но можно и сделать столько страниц, сколько вы хотите.
    >> Я back-end разработчик и хочу изучить "модные" UI-фреймворки. Один из них - Angular 4
    Тоже хочу изучить angular4, но вот как-то руки не доходят. Сначала надо изучить typescript. )))
    Что касается subj, то всё взаимодействие с backend осуществляется методом чёрного ящика через ajax. Как вы им пользуетесь - php_curl, jquery, angular, C# webrequest - без разницы.
    Ответ написан
  • Как правильно организовать регистрацию и авторизацию пользователей сайта (Java)?

    AlexZaharow
    @AlexZaharow
    Программист.
    В основном всё верно. Я бы немного подправил следующие моменты:
    >> Пользователь отправляет, это "что-то", полученное при регистрации и в ответ получает страницу
    Не пользователь, а клиент (пользователь сидит за компом). Но клиент - не ваша программа, а в основном браузер (curl - тоже клиент) и ваша программа максимум может иметь доступ к некоторым кукам, да и то не ко всем (как настроит куку сервер, см. cookie httponly). Сервер проверяет токен и сопоставляет контекст приложения (php/java) с параметрами пользователя (_GET/_POST/_SESSION), поэтому код backend как правило никак не может влиять на контекст пользователя, только если в нём нет ошибок на выполнение критичных операций. (Естественно, что нужно разбираться в архитектуре сервера, т.к. на уровне фильтров, а в tomcat/IIS они есть, можно сделать много чего нехорошего ещё до обработки запроса под пользователем).

    >> Что представляет из себя токен? (случайную строку, которая является по сути идентификатором? Если да - то какой она должна быть длины, нужно ли ее шифровать и где хранить на стороне клиента?
    Токен - это уникальный идентификатор сессии в формате именно строки. Можно в него вставить JSON.stringify(), но браузер всё равно будет идентифицировать его как строку. Символы ему без разницы. Выдаётся на сессию на одном клиенте. Т.е. если вы подключитесь/логинитесь разными браузерами под одним логином пользователя, то у них будут разные токены. Однако, если вы технически сможете своровать токен из одного браузера и воткнуть его в другой, то фактически будете работать под одной сессией в разных браузерах и проходить аутентификацию во втором браузере не придётся (Иногда этим можно пользоваться для тестов). Именно по этом причине токены надо зарывать по максимуму, т.е. отправлять их в заголовках и в протоколе HTTPS. Только это не касается протокола Kerberos, там аутентификация производится другим механизмом и завладевание кукой не даст результата (весьма сложный механизм, используется в корпоративных сетях, не в интернете).
    где хранить на стороне клиента - Для кук браузер сам их хранит и сам же дописывает в заголовки при выполнении запросов, так что это делается прозрачно. Поставьте fiddler, там всё видно.
    нужно ли ее шифровать - Обычно нет.

    >> Слышал про OAuth и долго и коротко живущие токены
    OAuth используется, когда вы хотите привлечь большое количество пользователей, предполагая, что у них есть аккаунты в соцсетях, т.е. этот протокол упрощает и регистрацию и аутентификацию, но сложнее в настройках, чем form-based. тут есть одна тонкость - аккаунт пользователя в вашей программе надо будет всё равно создавать и связывать его с аккаунтом профиля в соцсети (сейчас подробнее не скажу, давно занимался)
    Теперь какая связь между токеном и OAuth - Делаем выход из контекста рассуждения "на уровень выше" и вспоминаем, что OAuth - протокол аутентификации, а после аутентификации нужно (барабанная дробь ...) тадам - установить токен сессии!!! Т.е. с помощью OAuth вы только проверяете валидность пользователя, затем ваша программа выясняет с каким аккаунтом на вашем сайте он связан и устанавливает токен/куку, чтобы не проходить аутентификацию каждого запроса от пользователя аккаунтов с соцсети. Ну, представьте, что даже на CSS и IMG надо будет требовать подтверждение? (если только не настроен NGINX для отдачи статики, как вы указали выше).

    >> Если да - то какой она должна быть длины
    Посмотрите на форматы и размеры токенов, которые выдают соцсети? Да, взять этот же toster.ru, вот прям сейчас:

    719fc6c4999547af95b58b252dd5255d.png

    Токен сессии придумываете самостоятельно. Хоть sid. Формат строки токена ничем не определён. Главное, чтобы при идентификации пользователя случайно не выдать аналогичный токен другому пользователю, а то получится, что два пользователя идентифицируются сервером как один, кто первый залогинился. Так что одна из проблем сервера - обеспечить уникальность токенов сессий, а это важный раздел безопасности. Вполне можно поискать способы компрометации выдачи "нужных" токенов и тогда безопасность сайта под большой угрозой.

    >> Достаточен ли уровень безопасности OAuth или стоит искать что то другое? jwt?
    Поскольку OAuth тоже начинается с "вешалки", т.е. с form-based аутентификации в соцсети, то главное обеспечить достаточный уровень секретности - HTTPS и всё будет норм.
    Ответ написан
  • Как узнать запрос и ответ?

    AlexZaharow
    @AlexZaharow
    Программист.
    При запуске виртуальной машины Java прописать параметры проксирование https://stackoverflow.com/questions/120797/how-do-... и завернуть все запросы на fiddler (в fiddler требуется включить опцию разрешения удаленного подключения). Именно fiddler и покажет в хорошем виде все http request/response.
    Ответ написан
  • Как динамически определять условия для параметризованного select?

    AlexZaharow
    @AlexZaharow
    Программист.
    Специального встроенного механизма в jdbc нет. Нужно сначала сгенерировать строку для нового запроса с параметрами, потом выполнить установку этих параметром. Либо заготовить несколько запросов с разными условиями и также параметризовать их перед выполнением.
    Ответ написан
  • Можно ли сделать автоматическую авторизацию??

    AlexZaharow
    @AlexZaharow
    Программист.
    Если вам для тестов, то посоветую вам использовать fiddler. Там есть возможность скриптования и можно заменять всякие заголовки и куки на лету. Т.е. вы проходите авторизацию на сайте (любым методом, хоть post-аутентификацией, хоть oauth, хоть openid), вытаскиваете из любого запроса после авторизации куки или необходимые заголовки (очень редко) а после во всех запросах скриптом fiddler подменяете параметры. Я так прогонял тесты по смс-аутентификации, когда программа уж точно сама не может залогиниться. Таким способом можно делать любые запросы авторизованными, даже curl, wget и другие, главное перенаправить запрос через fiddler. Иногда кука может протухнуть, тогда заново перелогиниваетесь, прописываете новую куку в скрипт fiddler и продолжаете дальше... Бронебойная хрень даже для сайт-скраббинга. )))
    Ответ написан
  • Что взять за основу для сайта: несколько форм, несколько человек с разным уровнем доступа?

    AlexZaharow
    @AlexZaharow
    Программист.
    Если проект у вас вообще с одной формой, то не стоит заморачиваться со spring по двум причинам:
    1. Изучение Spring у вас займёт времени больше, чем сам проект.
    2. Spring автоматизирует действия, в которых вы ещё не очень разбираетесь. Это как изучать angular, не понимая JavaScript.
    Лучше освоить логику работы сервлетов, на уровне обработчиков запросов, потому что все Java-фреймворки работают через них.
    Tomcat нормально подойдёт.
    Ответ написан
  • Как подружить Fiddler и Java?

    AlexZaharow
    @AlexZaharow
    Программист.
    Встречный вопрос. Вы не пробовали вот эту настройку:

    97f64eb5c3144b3e997d3e4b6d9969bb.png

    Я через неё несколько фидлеров в цепочку ставил...
    Ответ написан
  • Когда и как компилируется JSP?

    AlexZaharow
    @AlexZaharow
    Программист.
    Грубо говоря, .jsp это что-то типа .php.
    Вот первое же описание по поиску :)
    https://ru.wikipedia.org/wiki/JSP


    JSP страницы имеют расширение .jsp и размещаются там же, где и обычные Web-страницы
    Поэтому при первом запросе этот процесс может вызвать небольшую задержку

    сервлет и .jsp - это зеркальные близнецы, что-то типа когда один - это вывернутое наизнанку представление другого. Просто после некоторого опыта использования того и другого вы будете их применять по своему вкусу. По моему личному опыту, я не пользуюсь ни тем, ни другим, а предпочитаю рендерить страницы в html/js, а данные получать через ajax (через сервлеты, хотя теоретически можно и через jsp - им без разницы, что вы через них отдаёте).

    P.S.
    JavaEE - это такой миф в мире Java. Все о нём говорят. Не парьтесь. Просто изучайте работу backend-а. Когда вы достигнете определённого уровня, то сами себе ответите на вопрос, что такое JavaEE.
    Ответ написан
  • Есть ли Java IDE с возможностью запуска удаленной отладки?

    AlexZaharow
    @AlexZaharow
    Программист.
    JRebel (https://zeroturnaround.com/software/jrebel/) очень подходит для перезагрузки изменений файлов/классов (работает как с локальными серверами, так и с удалёнными).
    Например, у меня есть проект maven и я его запускаю на локальной машине (с помощью cargo-компонента, но не суть, там стартует tomcat). JRebel висит в фоне и мониторит изменения проекта:
    Вот пример изменения класса:

    7c017df89a644e729534f965aedc656e.png

    А это пример изменения ресурса:

    398cb81d225f46eabca1cb709fcae9db.png

    И то и то обновилось на сервере.

    Тут один недостаток - это платный компонент, почти 500$, но на пару недель дадут просто так попользоваться. Мне хватило недели, чтобы оценить )))
    Ответ написан
  • Удачные инструменты для работы с json в Java?

    AlexZaharow
    @AlexZaharow
    Программист.
    Как ни странно, но посоветую драйвер Mongo. То что это драйвер не имеет значения. Данные в него можно заложить и без загрузки данных с сервера Mongo.

    mvnrepository.com/artifact/org.mongodb/mongo-java-... (Есть версия поновее)

    Объявляете переменную для вашего массива:

    import com.mongodb.*;
    import com.mongodb.util.JSON;
    
    BasicDBObject json = (BasicDBObject) com.mongodb.util.JSON.parse(json_str);
    BasicDBList result = (BasicDBList)json.get("result");


    Можно ещё воспользоваться Nashorn. Это позволяет вообще использовать скрипты JavaScript на Java, но надо приноровиться им пользоваться. Но штука офигенная.
    Ответ написан
  • Как создать переменную из массива?

    AlexZaharow
    @AlexZaharow
    Программист.
    Ваше желание очень похоже на использование map. Т.е. вам нужно просто преобразовать список list в map. Даже получите бонус в виде использования в именах "переменных" запрещённых в обычной жизни символов.
    Map<String, String> tables_sql = new HashMap<>();
    for( String role : new String[]{"cv_administrators+!;", "cv_operators", "cv_translators"}){
            tables_sql.put(role, "This is role "+role);
    }
    // получение значения:
    String val = tables_sql.get( "cv_administrators+!;" );  // This is role cv_administrators+!;
    Ответ написан
  • Почему при попытке запустить оконное приложение через cmd с помощью java ничего не происходит?

    AlexZaharow
    @AlexZaharow
    Программист.
    Frame вроде надо ещё показать на экране, например: docs.oracle.com/javase/tutorial/uiswing/components...
    Операция "new Frame" не выводит его на экран. Представьте, что вам нужно сделать массив из 100 фреймов. Неужели необходимо при создании их всех показывать?
    Ответ написан