• Spring Security — пример веб приложения с авторизацией по протоколу OAuth2 через BitBucket

    В данной статье мы рассмотрим способ авторизации пользователей в веб приложениях на Spring Boot по протоколу OAuth2 с использованием внешнего сервера авторизации (на примере Bitbucket).

    Что мы хотим получить


    Допустим, мы разрабатываем защищенное веб приложение, имеющее доступ к ресурсам пользователя на внешнем сервере, например, систему непрерывной интеграции, а в качестве внешнего сервера выступает Bitbucket, и мы не хотели бы хранить у себя логин и пароль пользователя от внешней системы. То есть нам необходимо авторизовать пользователя через Bitbucket, чтобы получить доступ к его учетной записи и ресурсам, дополнительно проверить, что он является пользователем нашего приложения и сделать это так, чтобы пользователь не раскрывал нам свои учетные данные от Bitbucket. Интересно как это сделать, — добро пожаловать под кат.
    Читать дальше →
  • Авторам! [именно так: в дательном падеже и с восклицанием]

      Хабр создали Авторы. Да, придумали, написали код и профинансировали его другие люди, но Хабр стал Хабром только благодаря статьям Авторов.

      Именно за Хабра-знанием Авторов пользователи приходили и приходят на ресурс. Это Авторы днями вычитывают свой текст, чтобы грамотнее подать статью, Авторы ночами не спят, чтобы доходчивее сформулировать свою мысль, Авторы пишут программы, чтобы подтвердить свою идею кодом, Авторы по крупицам собирают данные, чтобы продемонстрировать статистический отчет и Авторы наступают на грабли, чтобы рассказать о жесткости черенка.

      На Авторов же выливается токсичная смесь комментариев к их постам, и многие, боясь этой смеси, никогда не становятся Авторами. Написание статьи вырастает в противостояние между Авторами и Комментаторами, а рейтинг статьи становится некой демаркационной линией определяющей победителя. Авторская статья — это почти всегда вызов, но нельзя бросать вызов другим и ожидать, что тебе не дадут отпор. Зачастую этот отпор справедлив, но непропорционален, тем не менее, только преодолевая этот отпор, автор и становится Автором.

      Да, Авторы, Хабр — отвратительный ресурс, но лучше у нас нет…

      Отказ от ответственности
      Данное многострочие написано по предложению pvpokr как альтернативный взгляд на проблемы Хабра.

      Оно написано в один присест, без вычитки и корректировки, ибо, если я стану его перечитывать, то просто удалю, посему не обессудьте — публикуется «как есть».
      Читать дальше →
    • Apple Watch за недорого: как меня хотели «развести» на Авито и Юле

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


        Читать дальше →
      • Декларативное программирование клиент-серверных приложений на андроид. Часть 2

        В предыдущей статье кратко были показаны преимущества декларативного программирования клиент-серверных приложений на андроид в сравнении с императивным.

        Сейчас напишем небольшой, но достаточный, чтобы оценить эффективность библиотеки DePro, проект. Он представляет собой часть одного из учебных примеров библиотеки. Дизайн всех экранов, которые мы опишем приведен на следующих рисунках:

        image image image
        Экран DRAWER           Экран CATALOG          Экран PRODUCT_LIST

        image image image
        Экран CATALOG_а          Экран DESCRIPT         Экран CHARACTERISTIC

        image image image
        Экран FITNESS          Экран FITNESS_а         Экран Выхода

        Читать далее
      • Почему я люблю IKEv2 больше других VPN



          Сейчас все вокруг настраивают VPN для удаленных сотрудников. Мне больно смотреть, как люди устанавливают монструозные глючные программы, настраивают какие-то сертификаты, устанавливают драйвера TUN/TAP и делают множество сложных операций, в то время как лучшее решение уже встроено в операционную систему.

          IKEv2 — это современный протокол VPN, разработанный Microsoft и Cisco. Он используется по умолчанию для новых VPN-подключений в Windows, macOS, iOS. Он быстрее и безопаснее большинства VPN-протоколов и может легко настраиваться на стороне клиента в два клика без использования сторонних программ.

          Я считаю, что IPsec IKEv2 отлично подходит не только для соединения серверов, но и для обычных VPN-подключений конечных пользователей. В этом посте я постараюсь убедить вас использовать IPsec IKEv2 для обычных домашних пользователей вместо OpenVPN.
          Читать дальше →
        • Быстрая разработка Web приложения на Vaadin и Spring Boot

          КПДВ


          Целью данной статьи является систематизация процесса разработки веб приложения на Vaadin 14 с использованием Spring Boot.


          Перед прочтением данной статьи, рекомендую прочитать следующий материал:


          Читать дальше →
        • Совместимый с «Objective-C» «Swift»-код

          Хоть Apple и написали, казалось бы, подробную документацию о том, как можно использовать «Swift»-код внутри «Objective-C»-приложения (и наоборот), но, когда доходит до дела, этого почему-то окаывается недостаточно. Когда у меня впервые появилась необходимость обеспечить совместимость фреймворка, написанного полностью на «Swift», с «Objective-C»-приложением, документация «Apple» почему-то породила больше вопросов, чем дала ответов (ну или по крайней мере оставила множество пробелов). Интенсивное использование поисковых систем показало, что данная тема освещена в Сети довольно скудно: парочка вопросов на StackOverflow, пара-тройка вводных статей (на англоязычных ресурсах, конечно) – вот и все, что удалось найти.

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

          Читать дальше →
          • +9
          • 14,2k
          • 7
        • Удобное логирование в SpringBoot + Log4j2 + Maven

          • Tutorial

          Здравствуйте, уважаемые Хабровчане.


          Изложенный в статье материал предназначен для новичков и, возможно, как и мне сэкономит несколько часов поисков на StackOverFlow и других сайтах с целью получить удобную систему логирования, которая сама поймет куда логировать — в консоль, файл или logstash.

          Читать дальше →
          • +14
          • 21,7k
          • 9
        • Выбор между XML и SQL для накатывания скриптов LiquiBase на примере Java/Spring/H2

          В процессе работы над очередным проектом в команде возникли споры по поводу использования формата XML или SQL в Liquibase. Естественно про Liquibase уже написано много статей, но как всегда хочется добавить свои наблюдения. В статье будет представлен маленький туториал по созданию простенького приложения с бд и рассмотрим разницу метаинформации по данным типам.

          Liquibase — это независимая от базы данных библиотека для отслеживания, управления и применения изменений схем базы данных. Для того, чтобы внести изменения в БД, создается файл миграции (*changeset*), который подключается в главный файл (*changeLog*), который контролирует версии и управляет всеми изменениями. В качестве описания структуры и изменений базы данных используется XML, YAML, JSON и SQL форматы.

          Основная концепция миграций БД, выглядит следующим образом:


          Читать дальше →
        • Регистрация и авторизация с помощью Spring Security на примере простого приложения

          Добрый день!

          В этой статье будет рассмотрено создание простого веб приложения с использованием Spring Boot и Spring Security. В приложении будет реализована регистрация новых пользователей и авторизация, ограничение доступа к страницам сайта в зависимости от роли пользователя.
          Главная цель статьи показать как можно ограничить доступ к различным страницам сайта для пользователей с разными ролями.

          Что будет представлять из себя приложение


          Сайт со следующими страницам:

          • страницы доступные всем пользователям: главная, регистрации и логина;
          • страница доступная для зарегистрированных пользователей: новости;
          • страница доступная для администратора.

          Что будем использовать


          • JDK 8+;
          • Intellij Idea;
          • Spring (Spring Boot, Spring MVC, Spring Security);
          • Hibernate;
          • JSP;
          • PostgreSQL.
          Читать дальше →
          • +8
          • 41,9k
          • 9
        • JavaFX Weaver: интеграция JavaFX и Spring Boot приложения

          • Перевод
          Это заключительный пост в серии о JavaFX:

          1. Учебник по JavaFX: начало работы
          2. Учебник по JavaFX: Hello world!
          3. Учебник по JavaFX: FXML и SceneBuilder
          4. Учебник по JavaFX: основные макеты
          5. Учебник по JavaFX: расширенные макеты
          6. Учебник по JavaFX: CSS-стилизация
          7. JavaFX Weaver: интеграция JavaFX и Spring Boot приложения

          JavaFX & Spring


          В настоящее время Java разработчики, редко работают просто с Java. В большинстве проектов они обычно используют Spring Framework или Spring Boot. У этого подхода много преимуществ, так как эти проекты включают в себя много полезных функций.

          Однако, когда вы разрабатываете приложения JavaFX, нет простого способа интегрировать его со Spring. Интеграция не работает «из коробки», так как приложения JavaFX имеют свой собственный жизненный цикл и обеспечивают создание экземпляров контроллеров.

          Для этого поста есть репозиторий с примером, где вы можете посмотреть окончательный код проекта.
          Читать дальше →
        • Как подружить JavaFX и Spring Boot

          • Tutorial

          Не так давно появился такой замечательный фреймворк как Spring Boot, без которого я уже не представляю себе разработку на Java. Освещая неосвещенное, хочу рассмотреть интеграцию Spring Boot и всех его «плюшек» с JavaFX 2.

          Всех заинтересованных приглашаю под кат.
          Принять приглашение
        • Spring Data на примере JPA

          Введение


          Spring Data позволяет легче создавать Spring-управляемые приложения которые используют новые способы доступа к данным, например нереляционные базы данных, map-reduce фреймворки, cloud сервисы, а так же уже хорошо улучшенную поддердку реляционных баз данных.
          Читать дальше →
        • Spring Data JPA

            В статье опишу использование Spring Data.

            Spring Data — дополнительный удобный механизм для взаимодействия с сущностями базы данных, организации их в репозитории, извлечение данных, изменение, в каких то случаях для этого будет достаточно объявить интерфейс и метод в нем, без имплементации.

            Содержание:

            1. Spring Repository
            2. Методы запросов из имени метода
            3. Конфигурация и настройка
            4. Специальная обработка параметров
            5. Пользовательские реализации для репозитория
            6. Пользовательский Базовый Репозиторий
            7. Методы запросов — Query

            Читать дальше →
          • Хабр Конвертер: чтобы версталось легко

              Наверняка многие из вас хотя бы однажды пользовались хабраконвертером, который официально рекомендован администрацией Хабра — https://shirixae.github.io/habraconverter-v2/. Несколько лет назад его создал хабравчанин meta4, а потом доработал Shirixae. Принцип простой: открываете гуглодок с постом, Ctrl-A, Ctrl-C и вставляете в окно конвертера. Нажимаете кнопку «Конвертировать» и получаете готовый код вёрстки, который можно вставлять в редактор Хабра и публиковать. Только перед этим нужно пройтись и поправить кое-какие мелочи.

              И всё бы хорошо, если верстать приходится не слишком часто. Или посты небольшие, несложные. Но если вы верстаете помногу, и в постах есть и картинки, и таблицы, и куски кода, то из раза в раз приходится делать рутину: вставлять нужные пустые строки и убирать лишние, заменять теги <sоurce> на <cоde>, и т.д. и т.п. Мы решили потратить день, чтобы потом долетать за час, и допилили конвертер.

              Новая версия лежит тут, а под катом — перечисление доработок.
              Читать дальше →
            • Весь Хабр в одной базе

              Добрый день. Прошло уже 2 года с момента написания последней статьи про парсинг Хабра, и некоторые моменты изменились.


              Когда я захотел иметь у себя копию хабра, я решил написать парсер, который бы сохранил весь контент авторов в базу данных. Как это вышло и с какими ошибками я встретился — можете прочитать под катом.

              Читать дальше →
            • HTTP-заголовок Feature-Policy и контроль поведения веб-страниц в браузерах

              • Перевод
              Существует одна совершенно бесподобная методика, позволяющая держать производительность веб-проекта под контролем. Она заключается во внедрении в процесс разработки механизмов, результаты работы которых хорошо заметны. Эти механизмы нацелены на то, чтобы всегда напоминать программисту о важности производительности. В этом контексте есть кое-что, что мне очень нравится. Это — HTTP-заголовок Feature-Policy.



              Этот заголовок — сравнительно новая возможность, которая позволяет разработчику сделать так, чтобы во время просмотра его сайта включались и отключались некоторые возможности браузера.

              Например, можно сообщить браузеру о том, что он не должен позволять использовать API Geolocation, передав ему следующий заголовок:

              Feature-Policy: geolocation 'none'

              У использования заголовка Feature-Policy есть, с точки зрения безопасности и производительности, множество плюсов. Но мне сейчас особенно нравится то, как Feature-Policy можно использовать для того, чтобы сделать более заметными проблемы производительности сайтов, которые обычно легко проглядеть. Это можно сравнить с чем-то вроде «линтинга производительности». В частности, речь идёт о выявлении проблем с изображениями, используемыми в веб-проектах.
              Читать дальше →
              • +33
              • 8,4k
              • 5
            • Zip-файлы: история, объяснение и реализация

              • Перевод


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

              В статье очень подробно объясняется, как работают Zip-файлы и схема сжатия: LZ77-сжатие, алгоритм Хаффмана, алгоритм Deflate и прочее. Вы узнаете историю развития технологии и посмотрите довольно эффективные примеры реализации, написанные с нуля на С. Исходный код лежит тут: hwzip-1.0.zip.
              Читать дальше →
            • Настройка Asterisk 1.8 + FreePBX 2.10 с нуля

              Данная статья является продолжением статьи по установке системы.
              Наконец тем или иным образом у нас появился установленный Asterisk и FreePBX.

              Опишу ситуацию немного подробнее для сравнения подойдет ли Вам наша схема работы. Мы небольшой интернет провайдер, нам нужна запись разговоров, очереди звонков на городские и мобильные телефоны, голосовое меню рассказывающее про акции с выбором в какой отдел попасть, и возможность быстро поставить перед всем этим сообщение об авариях на определенных улицах города, чтобы люди не перенапрягали тех поддержку, причем желательно бесплатно. Чтобы не покупать дорогие шлюзы мы решили сменить городские телефонные номера и купить пару номеров + десяток каналов у провайдера ip-телефонии. Кто то скажет что это ненадёжно и т.д. Только скажите- какая разница интернет провайдеру на городские телефоны, если у него упал весь интернет? Зато это дешево. Подключение нам обошлось всего то в 38 $, каждый телефонный номер в 2$ и линия в 1,2$ в месяц. После чего мы получили настройки даже без авторизации и к нашему ip адресу привязали аккаунт. Сразу хотелось бы оговорить как будет построена эта статья, чтобы не перегружать её тоннами скринов я опишу создание каждого элемента по одному разу(что советую проделать т.к. они понадобятся для ваших же последующих экспериментов), а потом уже распишу схему что на что ссылается в нашей схеме работы. Наверняка схема у вас будет другая, но зато сможете понять смысл. Описывать буду только те элементы, которые непосредственно понадобились при настройке.
              Читать дальше →
            • Почему для открытия меню Windows читает один файл сто тысяч раз?

              • Перевод

              «Проводник тратит 700 мс на то, чтобы открыть контекстное меню панели задач. 75% этого времени он выполняет 114 801 операцию считывания из одного файла, средний объём считываемых данных 68 байт.

              Мне стоит написать пост об этом, или достаточно саркастичного твита?»


              За компьютером я работаю быстро, и поэтому меня раздражает, когда приходится ждать завершения операции, которая должна выполняться мгновенно. Постоянной помехой на моём сверхмощном домашнем ноутбуке стало медленное закрывание окон на панели задач. Я нажимаю правой клавишей на значок, жду, пока откроется меню, а затем выбираю «Закрыть окно». Самым медленным в этом процессе должны быть перемещения мыши, но выясняется, что наиболее долгим компонентом оказывается задержка перед появлением меню.

              Это напрягало меня уже давно, но я проявлял нехарактерный мне самоконтроль и удерживался от раздражения. Так было до сегодняшнего дня, когда я наконец сорвался и схватился за трассировщик ETW.

              Этот пост написан как проверка скоростного блогинга. От момента нахождения проблемы и саркастичного твита о ней до публикации поста прошло примерно 90 минут.
              Читать дальше →