/*айтишные заметки*/
Пример: Ajax с помощью JQuery в Spring MVC.
@Controller public class HomeController { @RequestMapping(value = "/getCharNum", method = RequestMethod.GET) public @ResponseBody Response getCharNum(@RequestParam String text) { Response result = new Response(); if (text != null) { result.setText(text); result.setCount(text.length()); } return result; } @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) { return "home"; } }
Java web frameworks. JSF vs Spring MVC.
UPDATE: Возможно вам будет интересен пример использования Spring Security 4 и AngularJS.
Spring Security - фреймворк, предоставляющий удобную реализацию механизмов аутентификации и авторизации в Java EE приложениях. Раньше был известен как Acegi Security, а в 2008 году был включен в проект Spring. Является стандартом де-факто для веб-приложений Spring MVC. Использовать Spring Security очень удобно и просто - без особых усилий можно создать гибкую систему управления правами в вашем веб-приложении.
Для того, чтобы показать как это работает - приведу простой, но подробный пример приложения, которое использует Spring Securtiy. Приложение будет состоять из страницы входа и закрытой страницы, доступ к которой имеет только один пользователь. Как нетрудно догадаться, это будет веб-приложение Spring MVC. Итак, цель поставлена, инструменты определены, приступаем к делу!
Для примера создаем шаблонный проект веб-приложения Spring MVC, используя Spring Tool Suite (File > New > Spring Template Project > Spring MVC Project ).
После этого у нас уже есть простое веб-приложение, которое можно запустить на сервере (ссылку на полный код примера можно найти в конце поста). Первое что необходимо сделать - добавить в pom.xml необходимые зависимости:
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>${org.springframework-version}</version> </dependency>
UPDATE: Возможно вам будет интересен пример использования Spring Security 4 и AngularJS.
Я уже упоминал про JavaEE фреймворк Spring Security и приводил простой пример его использования. Этот пример включает в себя создание веб приложения с двумя страницами - страница логина и закрытая страница. Для авторизации, как ясно, там используется Spring Security. Однако имя пользователя и пароль (точнее SHA-1 хэш) в этом примере хранятся в XML файле настройки контекста Spring Security. Понятно, что в реальных задачах данные пользователя, как и его роли, хранятся в базе данных.
В этом посте я хочу привести усовершенствованный пример, в котором имя пользователя, хэш пароля и роль пользователя в системе будут храниться в БД Mysql. Для основы возьму код предыдущего примера, а полный код для этого поста можно найти ниже.
Итак, как можно связать авторизацию с помощью Spring и Mysql. Сделать это можно немного по разному, посмотрим на один из способов. Первым делом установим Mysql и создадим тестовую БД, в которой будет одна таблица. В таблице содержится имя пользователя, название его роли в системе, и хэш пароля. Обычно в БД хранят и другую информацию - например дату, до которой аккаунт активен и пр. Но в этом примере этого не будет.
Codenvy - облачная IDE для Java и не только
В поисках стоящей облачной IDE для JavaEE наткнулся на интересный проект - Codenvy. Codenvy это полнофункциональная облачная среда разработки, которая поддерживает различные языки и платформы. Поскольку меня интересовала именно возможность разработки веб-приложений JavaEE, я расскажу свои впечатления именно об этом.
В процессе поиска, я посмотрел на разные облачные IDE, но это первый и единственный проект, который мне действительно понравился. Во первых, мне хотелось получить именно IDE, а не просто модный_текстовый редактор аля Sublime Text. Во вторых, мне хотелось чтобы среда позволяла вести отладку JavaEE приложений, используя например Tomcat. Так вот, что мы имеем с Codenvy.
Codenvy поддерживает много платформ - Tomcat, Jboss и пр. Разумеется, можно запустить и standalone Java проект, собрав его с помощью Maven. Можно импортировать готовый Maven-проект, сделанный например в Eclipse. После чего останется лишь выбрать чем проект собирать (я выбрал maven) и на чем запускать (я выбрал Tomcat). После таких минимальных настроек, проект сразу запустился! В IDE есть:
Сжатие JS и CSS с помощью Maven
Чем меньше размер загружаемых скриптов и css файлов - тем лучше. Для того чтобы сжать файлы, можно пользоваться разными утилитами и плагинами, в зависимости от используемой технологии/среды разработки. Я хочу привести пример того, как можно использовать Maven для сжатия CSS/JS файлов. Я предполагаю ситуацию, в которой у вас есть веб-приложение, которое выкладывается на сервер в виде WAR архива. Понятно, что для ведения разработки сжатые файлы не подходят, но сжимать отдельно каждый файл до сборки продакшн версии проекта - решение не особо удобное. Поэтому хотелось бы сделать так, чтобы при сборке приложения CSS/JS файлы автоматически сжимались. Здесь отлично подойдет Maven с его профилями и плагинами!
На всякий случай отмечу, что я использовал Maven 3.0.4, со сборкой проекта в Eclipse Mars. Для решения задачи я использую два плагина: minify-maven-plugin и maven-war-plugin. Первый сжимает указанные в pom файлы, а второй перезаписывает их в WAR архиве. Таким образом получается, что больше не нужно держать две версии всех скриптов - аля file.js и file.min.js, аналогично и с CSS. Это избавляет от головной боли! Просто при разработке используются несжатые версии файлов, а при сборке продакшн версии проекта файлы сжимаются и перезаписываются в WAR архиве.
Spring Framework можно назвать стандартом де-факто в мире Java. Еще бы, ведь некоторые концепции, реализованные в этом фреймворке повлияли на саму спецификацию JavaEE. Spring Security является дочерним проектом Spring, и предоставляет средства аутентификации и авторизации для Java/JavaEE приложений. С другой стороны, в мире фронтенда победил JavaScript и фреймворки, позволяющие создавать SPA веб-приложения - AngularJS, ReactJS, BackboneJS и другие. Я хочу привести пример, как можно успешно использовать Spring Security 4 совместно с Angular. В этом примере мы напишем REST бекенд, используя Spring MVC. Также мы реализуем аутентификацию и авторизацию с помощью Spring Security, в то время как на фронтенде будет использоваться AngularJS.
В целом, пример больше всего ориентирован на backend составляющую. Используя описанный принцип, можно аналогично использовать какой-нибудь другой фреймфорк для фронтенда (например Angular 2). Итак, нашей целью будет создать веб-приложение с несколькими разделами - открытый раздел и два защищенных раздела, в которые имеет доступ только авторизованный пользователь. Все должно работать через AJAX и должна быть функция "запомнить меня".
В примере будет использоваться Java 8, Tomcat 8, Spring 4.3, Spring Security 4.1, AngularJS 1.4.9. В конце поста вы можете найти ссылку на полный код проекта.