• Как исправить ошибку 401 при авторизации в приложении?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый вечер.
    Ошибки 4хх - являются ошибками на клиенте.
    Было бы неплохо увидеть содержимое post запроса, который убегает на сервер и конечно же то, что приходит на сервер.
    Причины могут быт разные:
    1) содержимое формы (названия инпутов - имя пользователя и пароль), а также ожидаемые названия инпутов отличаются. Например, на сервере ожидается username & password, а вы отправляете login & pass. Обратите внимание на атрибут name инпутов и при необходимости добавьте сответствующие названия в конфиг. .formLogin()
    https://www.baeldung.com/spring-security-login
    2) может быть запрос до спринга даже не доходит по каким-то причинам.
    В общем, не буду гадать и вы не гадайте. Проведите дебаг проекта и все станет на свои места
    Ответ написан
  • Можно ли для придания интерактивности на вэб-страницах в место javascripta использовать java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Если речь идет о нормальном проекте, то нет.
    Основу веба составляют 3 языка - html, css, js.
    java, python, php, typescript, ruby лишь серверные языки (в данном контексте). В старых браузерах можно запускать applet'ы, но в новых они не поддерживаются.
    Единственное решение - писать код на Java, который впоследствии транпилируется в JavaScript. Об этом уже упомянул коллега - Vamp
    Ответ написан
    Комментировать
  • Как правильно спроектировать обработку ошибок в слоях?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Я предпочитаю делать это следующим образом.
    На уровне репозитория (FooRepository) получаю Optional<Foo>. Далее на сервисном уровне (FooServiceImpl), который дублирует метод репозитория получаю уже Foo или в случае его отсутствия выбрасываю кастомное исключение FooNotFoundException. Затем некий глобальный ControllerAdvice ловит это исключение и возвращает http статус 404 с кастомным текстом Foo Not Found.
    Ответ написан
    Комментировать
  • Jar файл вылетает из-за кнопки вывода PDF?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Запустите ваш jar через cli (bash, commander, powershell и др.). Затем попробуйте провести соответствующую операцию, чтобы получить нужное исключение. Данное исключение отобразится в консоли. Остается лишь найти причину и исправить ее.
    Ответ написан
    Комментировать
  • Как добавить в Woocommerce функцию оплаты с платежной инструкцией на депозит в банк. счете?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Вбиваете в поиск что-то типа
    woocommerce invoice gateway plugin

    и находите кучу плагинов.
    Например,
    https://ru.wordpress.org/plugins/woocommerce-pdf-i...
    https://wordpress.org/plugins/wc-invoice-gateway/
    https://www.webtoffee.com/generate-woocommerce-pdf...
    А дальше установите и протестируйте
    Ответ написан
    1 комментарий
  • Spring security собственный шаблон для 403?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день.

    Можно использовать этот сниппет. Тут можно отловить код http ошибки (statusCode), а затем если значение этой переменной равно 403, то отобразить нужный шаблон.
    @Controller
    @RequiredArgsConstructor
    public class HttpErrorController implements ErrorController {
    
      @RequestMapping("/error")
      public ModelAndView handleError(HttpServletRequest request) {
        Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
        if (status != null) {
          int statusCode = Integer.valueOf(status.toString());
          // тут при помощи switch case находим код 403 и отдаем нужный шаблон.
        }
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("/frontend/templates/http-errors");
        return modelAndView;
      }
    
      @SuppressWarnings("deprecation")
      @Override
      public String getErrorPath() {
        return null;
      }
    }
    Ответ написан
    Комментировать
  • Что делать если лого ломает сайт и поменять брейкпоинты бургера на сайте Wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый вечер.
    1) Как отметил коллега, у вас ошибка в слове Coockie должно быть Cookie.
    2) Далее настоятельно рекомендую задавать вопросы поотдельности, а не 3 в одном.
    3)
    как поменять брейкпоинты меню бургера на сайте?

    Что именно вы подразумеваете под брейкпоинтом в данном контексте? В моем понимании брейкпоинт - это точка остановки во время дебага. У вас при ширине 961 - 1452 пикс. меню начинает постепенно сжиматься, но бургер не появляется. Грубо говоря, в планшетной версии отображается полноценное меню, а не бургер. Можно при помощи медиазапросов скрыть полноценное меню и отобразить бургер. скрыть - ashade-nav показать - ashade-mobile-header
    4)
    Как убрать виджет ,,недавние комментарии" на сайте на странице блога

    Раз это виджет, то значит он убирается в разделе Внешний вид - виджеты. Далее найти соответствующую колонку и удалить виджет recent comments. Или же может быть, что при помощи виз. редактора определена область виджетов и добавлены необходимые виджеты. Тогда найдите соответствующую страницу и удалите оттуда этот виджет.
    5)
    на сайте логотип с размером 500x500 занимает пол экрана по какой-то непонятной причине, а когда он меньше хоть бы на 1 пиксель он становится маленьким как не знаю что (можете посмотреть на сайте)

    Меня больше заинтересовало другое, а именно название лого)))
    sbxMaEu.png
    Вот, будет умора, когда лого проиндексируется и попадет в гугл с таким названием
    К тому же, логотип на данный момент размером 300х250 пикс, скорее всего лого становится маленьким потому, что там высота задается автоматически, а ширина 100%. Когда меню уменьшается, то логотип по ширине не уменьшается и соответственно, высота адаптируется под нее. На момент просмотра сайта я не заметил данной проблемы. Попробуйте описать проблему более подробно
    Ответ написан
    1 комментарий
  • Что использовать Kotlin Multiplatform или Flutter?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Есть вот, такая штука для работы на Java - https://multi-os-engine.org/
    Рассматриваете ли вы применение языков js / ts с React Native?
    Ответ написан
    1 комментарий
  • Как средствами JavaScript отправить форму, содержащую текстовые поля и файл, в формате JSON?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Я так понял, что у всего содержимого формы Content-type должен быть multipart/form-data, верно?

    Да, все верно.

    Также не забывайте отправлять csrf токен, если в настройках безопасности он у вас включен. Некоторые шаблонизаторы (например, thymeleaf) делают это автоматически, но при отправке содержимого формы средствами js надо csrf тоже отправлять. Для этого в head добавляется мета-тег, в который вставляется csrf токен.
    Затем средствами js необходимо получить значение этого тега (токен) и отправить с формой.
    Подробности тут:
    https://www.baeldung.com/spring-security-csrf
    Раздел 3.4 Using Json - https://www.baeldung.com/spring-security-csrf#4-us...

    e.preventDefault();
    Скорее всего эта строка должна быть выше всех. Как бы вы сперва останавливаете form submission, а затем уже делаете все остальное. Иначе у вас форма будет отправлена, а затем выполнится остальной код.

    А вот, ответ на ваш вопрос:
    https://stackoverflow.com/questions/49845355/sprin...
    И в первом ответе и во втором описывается вариант отправки формы средствами js с файлом и с другими данными.
    Ответ написан
  • Какие микросервисы пишут на Java для E-commerce?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Я бы сказал, что по частоте разработки e-commerce больше применяются PHP & Python, возможно еще Ruby, нежели Java. На Java можно разработать ровным счетом все то, что можно сделать на РНР.

    На php пишется большой монолит - торговая площадка с множеством поставщиков. так же есть море парсеров цен, картинок, загрузки прайсов, пересчета цен. Какой микросервис есть смысл написать на Java Spring...

    Так все-таки у вас монолит или приложение микросервисной архитектуры?

    Появился Java программист в команде и нужно его загрузить работой чтоб он усилил проект. Есть идеи?

    Обычно, разработчика берут для выполнения определенных задач. Если у вас есть задачи со сложной бизнес логикой, с которыми может справиться C# или Java, то это другое дело. Иначе зачем вам Java разработчик нужен?
    А раз у вас нет работы для Java разработчика, то зачем вам содержать столь огромный штат. Ведь, можно по надобности обращаться во фриланс к Java разработчику.

    Также учтите следующий момент: допустим, что вам сегодня выгодно содержать Java разработчика и он напишет некоторые микросервисы. Вы столкнетесь со следующими моментами:
    - дороговизна поддержки
    - проблема обеспечения acid в микросервисных приложениях
    Отсюда возникает вопрос - а зачем вам это все? Пишите все на РНР.

    Что нового умеет Java по сравнению с php, может какие полезные библиотеки для машинного обучения что можно применить для интеллектуального формирования коммерческого предложения или может для умного поиска?

    Ну тут уж лучше нанимать python разработчика для deep learning, как мне кажется.
    Ответ написан
  • Как сделать, чтобы в письме владельцу магазина и клиенту отправлялась ссылка на товар, который клиент хочет купить в лид форме в один клик?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Как сделать так чтобы во всплывающих формах в Contact Form 7, при отправке уведомления клиенту и владельцу магазина оставлялась ссылка на товар который хочет купить клиент?

    Я так понимаю, что вы решили отказаться от функционала самого WC и вместо полноценного оформления корзины решили использовать CF7?

    Если так, то можно по-разному реализовать вашу задачу.
    1) У плагина CF7 есть свои теги. Этот вариант может не сработать в ряде случаев. Например, пользователь кликнул на кнопку в корзину находясь на странице категории товаров и соответственно, вместо ссылки самого товара в письмо попадет ссылка категории
    https://contactform7.com/special-mail-tags/
    Ищите:
    [_url]
    или
    [_post_url]

    2) (Как по мне более приемлимый способ). Для этого нужно владеть JavaScript и jQuery. По клику "В корзину" получаете ссылку на текущий товар, затем находите селектор поля из всплывающего окна и вставляете туда вашу ссылку. Но вам нужно учесть, что в корзину пользователь может добавить несколько товаров и соответственно, ссылка на каждую из них должна попасть в форму CF7
    Полезные ссылки:
    Отловить клик на элементе
    https://www.w3schools.com/jquery/event_click.asp
    или https://api.jquery.com/on/
    Вставить ссылку в поле input
    https://ruseller.com/jquery.php?id=47

    3) Если же вы можете использовать функционал корзины и готовы отказаться от CF7, то попробуйте поискать некий плагин для оффлайн оплаты. Тогда вам не нужно будет ссылку каждого выбранного товара добавлять в письмо, так как этот вопрос будет решаться внутренними средствами WC.
    Ответ написан
    1 комментарий
  • Почему Role и Privileges выдаются в UserDetailsService в одной коллекции, как равноценные понятия в данном примере?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Собственно говоря, в той же статье откуда вы взяли код (baeldung) ниже написана причина смешивания ролей и привилегий.
    The interesting thing to follow here is how the Privileges (and Roles) are mapped to GrantedAuthority entities.This mapping makes the entire security configuration highly flexible and powerful – you can mix and match roles and privileges as granular as necessary, and at the end, they'll be correctly mapped to authorities and returned back to the framework.


    Вот, еще полезная информация (прочитайте первый ответ) - https://stackoverflow.com/questions/6357579/spring...

    В Spring есть понятие Authority. Это могут быть как роли, так и привилегии (privilege, permission). Так как конечная цель заключается в том, чтобы проверить права пользователя и так как привилегия и роль по факту являются теми самыми "правами", но лишь на разных уровнях абстракции (роль содержит сет привилегий), то в примере кода, который вы указали все смешано в одну кучу.
    Отличие проявляется на другом уровне, когда есть метод для проверки роли hasRole(), к слову, к значению этого метода автоматически добавляется префикс ROLE_, а также метод hasAuthority(), когда проверяются все права (роли и привилегии) и в этом случае для проверки роли нужно указывать префикс ROLE_ самому или уже указать название привилегии (например, READ_PRIVILEGE).
    Ответ написан
    Комментировать
  • Как обратиться ко второму значению в массиве?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Прежде всего рекомендую воспользоваться поиском и только после этого задавать вопрос.
    Что касается вашего вопроса:

    Допустим, что у вас есть класс
    class Brus {
    public String name;
    public String weight;
    }


    Также есть некий массив private Brus[] arr = new Brus[3];, который к слову инициализируется динамически.
    {
        arr[0] = new Brus("Брусок", 500);
        arr[1] = new Brus("Брусок1", 350);
        arr[2] = new Brus("Брусок3", 5500);
        count = 3;
      }


    Судя по этому коду предположу, что вам нужно рассчитать вес всех брусов. Я не дам вам полного ответа, чтобы вы могли сами подумать, а лишь напишу, что нужно делать.
    public void calc() {
    
    int calcTotalWeight;
                                   // получаем длину массива
         for (int i = 0; i < arr.length; i ++) {
           // получаем вес текущего блока
           int weight = arr[i].weight;
          // после получения веса текущего бруса суммируем его значение к общему весу calcTotalWeight
          }
       }


    Вот, похожий вопрос - https://stackoverflow.com/questions/3123086/access...
    К слову в вопросе указан вариант использования forEach. А также использование геттера вместо доступа к публичному полю
    Ответ написан
    Комментировать
  • Как отредактировать форму поиска на сайте Wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый вечер.
    Я установил на сайт новый плагин для поиска для того чтобы поиск работал как надо(по артикулам и тд)

    Вот, хороший плагин для реализации поиска (правда, платный) - Ajax Search Pro

    Но старые стили как я и думал слетели, я думал спокойно отредактирую их узнав классы через консоль разработчика Google Chrome, но я ошибся

    Ну конечно же слетят, ибо у нового плагина поиска свои стили и свои классы. Соответственно, вам нужно проинспектировать элементы плагины и в файл стилей style.css добавить ваши новые стили. Может потребоваться добавление css !important, чтобы перезаписать дефолтные стили плагина (если конечно же самим плагином не предусмотрена возможность изменения стилей через админку).

    Как вернуть все стили как было на новую форму(я не знаю куда прошлый разработчик запрятал все кастомные стили) вот скрины

    А нечего возвращать. Надо либо как я указал выше добавить стили для нового плагина, либо отключить этот плагин и вернуть старый поиск, в котором есть свои стили. Кастомные стили, в общем-то все стили обычно кладут в style.css. Однако, иногда в темах предусмотрено окно, куда можно добавлять эти стили. В этом случае они добавляются инлайном.

    Вот в общем в чем проблема, иконка поиска на сайте не работает при нажатии, почему?

    Тут проблема не в стилях, а в том что на самой кнопке поиска по какой-то причине нет обработчика (проблема в js). Тут могут быть разные причины:
    - баг самого плагина
    - конфликт js скриптов
    - ошибка где-то в js скриптах из-за чего каскадом перестают работать другие скрипты.
    Как видите, нет обработчика на кнопке поиска
    z4sBPJk.png
    Ответ написан
  • Как в Hibernate мапить вспомогательную таблицу?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Наверное, прежде всего мне стоит уточнить один вопрос...
    - Вы пытаетесь создать java код для уже готовой таблицы? (db first подход)
    - Или вы пытаетесь написать java код и хотите, чтобы получилось, как в указаной таблице? (code first подход).

    Если первый подход, то вам нужно описывать не сущности, а скорее работать с JDBC API.

    Вам стоит предоставить больше данных про взаимодействие ваших сущностей, но могу предположить следующее:
    Во-первых, сущности User & Role. Между ними скорее всего должна быть связь ManyToMany. Говоря простыми словами, у пользователя могут быть несколько ролей (админ, пользователь, модератор и т.д.). Соответственно, у вас будут 3 таблицы: users, roles, user_roles
    Далее не очень понятна сущность Room. Но скорее всего это либо OneToMany & ManyToOne, либо ManyToMany.
    Что касается вашей сущности RoomUserRole, то вам не нужно использовать @Id.
    @UniqueConstraint должно быть достаточно.
    https://www.baeldung.com/jpa-unique-constraints
    Ответ написан
    Комментировать
  • Почему Intellij не видит как проект просто отдельные Java file?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Могут быть разные причины этому. Я бы попросил скинуть скриншоты проекта, чтобы объективно можно было оценить ситуацию.
    Установлена ли у вас jdk? Также зажмите ctrl + shift + alt + S и гляньте в настроки проекта. Является ли проект maven или gradle проектом и если да, то установлены ли у вас указанные программы.
    Также скажите, что именно скидывает вам ваш друг. Скидывает ли он исходник или class файлы?
    В общем, предоставьте побольше информации
    Ответ написан
    Комментировать
  • Можно ли домен, логин и т.п прописать в properties?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Пожалуй, я лишь дополню ответ своего коллеги BorLaze некоторыми ссылками на полезные материалы.
    1 - насчет вынесения properties файла за пределы приложения:
    https://docs.spring.io/spring-boot/docs/2.1.8.RELE...
    В частности обратите внимание на:

    SpringApplication loads properties from application.properties files in the following locations and adds them to the Spring Environment:

    A /config subdirectory of the current directory
    The current directory
    A classpath /config package
    The classpath root

    The list is ordered by precedence (properties defined in locations higher in the list override those defined in lower locations).


    Вот, еще по этой же теме:
    https://www.baeldung.com/spring-properties-file-ou...
    Это Spring Boot + Docker: https://stackoverflow.com/questions/46057625/exter...
    Вот, еще информация о том, как можно исключить внешний конфиг файл
    https://stackoverflow.com/questions/26140784/sprin...
    https://stackoverflow.com/questions/26744060/exclu...

    Насчет хранения паролей в properties, вы можете воспользоваться - Jasypt
    Ссылка на первоисточник: https://stackoverflow.com/questions/37404703/sprin...

    Еще можно при старте приложения передать значения этих данных при помощи аргументов.
    Т.е. хранить в properties что-то типа ftp.host=example.com А при старте приложения использовать что-то типа такого:
    mvn spring-boot:run -Dspring-boot.run.arguments=--ftp.host=mysite.com

    https://www.baeldung.com/spring-boot-command-line-...

    В микросервисах подобная задача решается несколько иначе - поднятием отдельного конфиг сервера, который подтягивает конфигурацию извне при старте приложения. Но думаю, что это вам пока не нужно
    Ответ написан
    Комментировать
  • Как получить по ftp самый свежий файл?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день
    получить файл (без сортировки, а просто по указанию путь -> названию файла)

    А чем сортировка вам не подходит?
    Вот, ответ на ваш вопрос с использованием Comparator
    https://stackoverflow.com/questions/3824983/get-la...
    https://stackoverflow.com/questions/30883025/how-t...

    P.S. Как вариант можно попробовать получить список файлов и дату последнего изменения каждого из них. Затем для каждого LocalDateTime применив методы isAfter() isBefore() найти последнюю запись.
    Ответ написан
    Комментировать
  • Как ограничить права на редактирование записей?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день!
    Вам нужно добавить такие сущности, как Role & Privilege.
    Роли - ADMIN, USER и т.д.
    Привилегии - READ_PRIVILEGE, WRITE_PRIVILEGE и т.д.
    Ссылка - https://www.baeldung.com/role-and-privilege-for-sp...
    А затем уже логика работы следующая:
    Если пользователь является админом, то скорее всего у него должны быть все необходимые привилегии. Если это пользователь и если запись была создана им же и если например, у него есть EDIT_PRIVILEGE, то он может отредактировать запись. Если например, у вас есть роль - модератора, то привилегия EDIT_PRIVILEGE у него будет даже, если он не является владельцем записи и т.д. Дальнейшая логика строится на основе ваших нужд
    Ответ написан
  • Как сделать sql запрос из MySQL в TableView?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый вечер.
    Я бы попросил чуть конкретизировать ваш вопрос, ибо непонятны следующие моменты:
    1) Является ли ваш проект клиент-серверным приложением? Если да, то правильно ли я понимаю, что у вас есть клиент - JavaFX и сервер - Spring Boot. Если так, то получается, что вы хотите из клиента выполнить запрос на сервер и получить данные хранимые в БД. В этом случае вам нужно на серверной стороне (в Spring) написать REST сервис. Например, контроллер, который обрабатывает GET запросы и возвращает соответствующие данные в формате json. Затем при успешном ответе ваш клиент (javaFX) парсит json и маппит в pojo. После чего он выводится в TableView.
    Исходя из вышесказанного ответ на ваш вопрос:
    Подскажите как сделать запрос в бд?

    Вам необходимо:
    - Написать REST сервис (не нужно из клиента обращаться напрямую в БД)
    - Использовать библиотеку для выполнения запросов. Например, Retrofit

    2) Если у вас приложение не клиент-серверное, а лишь JavaFX приложение, которое использует фреймворк Spring. Например, при помощи либы JavaFX Weaver
    https://habr.com/ru/post/478402/
    https://github.com/rgielen/javafx-weaver
    То конечно же сторонний http клиент и вообще http клиент не нужен. Вы можете обратиться к БД написав методы для Repository и затем маппить их в dto (pojo) и выводить в таблице.
    Ответ написан
    2 комментария