Рубрики
Без рубрики

Войти для весеннего веб-приложения – Обработка ошибок и локализация

Как реализовать страницу входа для приложения Spring Security – Локализация, проверка и обработка ошибок.

Автор оригинала: Eugen Paraschiv.

1. Обзор

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

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

2. Страница входа

Начнем с определения очень простая страница входа :




   

Login

User:
Password:

Теперь давайте включим проверку стороны клиента, чтобы убедиться, что имя пользователя и пароль были введены, прежде чем мы даже представить форму. В этом примере мы будем использовать простой Javascript, но J’query является отличным вариантом, а также:

Как вы можете видеть, мы просто проверяем, если имя пользователя или пароль поля пусты; если они есть – javascript окно сообщений будет всплывающее с соответствующим сообщением.

3. Локализация сообщений

Далее – давайте локализовать сообщения, которые мы используем на переднем конце. Есть типы таких сообщений, и каждый из них локализован по-разному:

  1. Сообщения, генерируемые до форма обрабатывается контроллерами или обработчиками Spring. Эти сообщения ca ссылаются на страницах JSP и локализованы с помощью Локализация Jsp/Jslt (см. раздел 4.3.)
  2. Сообщения, локализованные после отправки страницы для обработки весной (после отправки в форму); эти сообщения локализованы с помощью Весенняя локализация MVC (См. раздел 4.2.)

3.1. Файлы message.properties

В любом случае, мы должны создать message.properties файл для каждого языка, который мы хотим поддержать; названия файлов должны следовать этой конвенции: messages_-местных .

Например, если мы хотим поддержать сообщения об ошибках на английском и испанском языках, у нас будет файл: messages_en.свойства и messages_es_ES.свойства . Обратите внимание, что для английского языка – messages.properts также действителен.

Мы собираемся разместить эти два файла в classpath проекта (в /основной/ресурсов ). Файлы просто содержат коды ошибок и сообщения, которые мы должны отображать на разных языках – например:

message.username=Username required
message.password=Password required
message.unauth=Unauthorized access!!
message.badCredentials=Invalid username or password
message.sessionExpired=Session timed out
message.logoutError=Sorry, error login out
message.logoutSucc=You logged out successfully

3.2. Настройка весенней локализации MVC

Весенний MVC обеспечивает ЛокалеРесольвер который работает в сочетании с его LocaleChangeИнтерцептор API, чтобы сделать возможным отображение сообщений на разных языках, в зависимости от настройки языка. Для настройки локализации необходимо определить следующие бобы в нашей конфигурации MVC :

@Override
public void addInterceptors(InterceptorRegistry registry) {
    LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
    localeChangeInterceptor.setParamName("lang");
    registry.addInterceptor(localeChangeInterceptor);
}

@Bean
public LocaleResolver localeResolver() {
    CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();
    return cookieLocaleResolver;
}

По умолчанию локальный разрешителещик получит код локале из заголовка HTTP. Чтобы заставить локать по умолчанию, мы должны установить его на localeResolver () :

@Bean
public LocaleResolver localeResolver() {
    CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();
    cookieLocaleResolver.setDefaultLocale(Locale.ENGLISH);
    return cookieLocaleResolver;
}

Этот локальный разрешаемый является CookieLocaleРесольвер что означает, что он хранит информацию о локализации в файле cookie на стороне клиента; как таковой – он будет помнить локале пользователя каждый раз, когда они в войти в систему, и в течение всего визита.

в качестве альтернативы существует SessionLocaleРесольвер , который помнит локале на протяжении всей сессии. Чтобы использовать эту ЛокалеРесольвер вместо этого нам необходимо заменить вышеуказанный метод следующим образом:

@Bean
public LocaleResolver localeResolver() {
    SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
    return sessionLocaleResolver;
}

Наконец, обратите внимание, что LocaleChangeИнтерцептор изменит локализацию в зависимости от значения Ланг параметр, отправленный со страницей входа по простым ссылкам:

3.3.JSP/JSLT Локализация

JSP/JSLT API будет использоваться для отображения локализованных сообщений, которые попали на сам страницу jsp. Чтобы использовать библиотеки локализации jsp, мы должны добавить следующие зависимости в пом.xml :


    javax.servlet.jsp
    javax.servlet.jsp-api
    2.3.2-b01


    javax.servlet
    jstl
    1.2

4. Отображение сообщений об ошибках

4.1. Ошибки проверки входа

Для использования поддержки JSP/JSTL и отображения локализованных сообщений в Войти.jsp позволяет реализовать следующие изменения на странице:

1. Добавьте следующий элемент lib тега в Войти.jsp :

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

2. Добавьте элемент jsp/jslt, который указать на messages.properts Файлы:

3. Добавьте следующую элементы для хранения сообщений на переменных jsp:


4. Измените скрипт проверки входа, который мы видели в разделе 3, чтобы локализовать сообщения об ошибках:

4.2. Ошибки предварительного входа

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

В примере вход форме ниже, мы реализуем это путем перехвата и regSucc и Регеррор параметров и отображение локализованного сообщения на основе их значений.


    

4.3. Ошибки безопасности входа

В случае, если процесс входа по какой-либо причине не удается, Spring Security сделает перенаправление на URL-адрес ошибки входа, который мы определили как /Войти.html?error-true .

Таким образом – подобно тому, как мы показали статус регистрации на странице, мы должны сделать то же самое в случае проблемы входа:


    

Обратите внимание, что мы используем <:сообщение …> элемент. Это означает, что сообщения об ошибках генерируются во время весенней обработки MVC.

Полная страница входа – включая проверку js и эти дополнительные сообщения статуса можно найти в github проект .

4.4. Ошибки логотипа

В следующем примере код jsp в logout.html будет проверять, если была ошибка в процессе logout.

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

Давайте посмотрим на полную логотип.jsp :

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="sec"
    uri="http://www.springframework.org/security/tags"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

    
Logged Out Login

Обратите внимание, что на странице logout также читается парам строки запроса logSucc , и если его значение равно истинное , будет отображаться локализованное сообщение об успехе.

5. Весенняя конфигурация безопасности

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

5.1. Перенаправление на URL-адрес ошибки входа

Следующая директива в <форм-логин…/> /элемент направляет поток приложения на URL, где будет обрабатываться ошибка входа:

authentication-failure-url="/login.html?error=true"

5.2. Логотип Успех перенаправить

логотип-успех-url атрибут просто перенаправляет на страницу logout с параметром, который подтверждает, что логотип был успешным.

6. Заключение

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

Мы будем смотреть на полную реализацию регистрации в следующей статье – с целью иметь полную реализацию процесса входа и регистрации готовы к производству.