Оригинальная статья, написанная Робом Винчем
В этом посте я расскажу, как сделать вашу конфигурацию Spring Security Java более читабельной. Этот пост предназначен для более подробного рассмотрения в Spring Security Java Config Preview: Web Security, где я заявил:
Благодаря форматированию нашего кода конфигурации Java его намного легче читать. Его можно прочитать подобно эквиваленту пространства имен XML, где «and ()» представляет необязательное закрытие элемента XML.
вдавливание
Отступ конфигурации Java Spring Security действительно влияет на ее читабельность. В целом, отступы, такие как список маркеров, должны быть предпочтительными. На высоком уровне это выглядит так:
builder #1 I modify builder I modify #1 I also modify #1 I also modify #1 and #2 I also modify builder I modify #2 I also modify #2 and #3 I also modify builder I modify #3 ...
Для более конкретного примера взгляните на следующий код:
http // #1 .formLogin() // #2 .loginUrl("/login") .failureUrl("/login?error") // #3 .and() // #4 .authorizeUrls() // #5 .antMatchers("/signup","/about").permitAll() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated();
- # 1 formLogin обновляет сам объект http . Отступ от formLogin увеличивается с отступом от http (очень похоже на отступ от < form-login> от <http> )
- # 2 loginUrl и faultUrl обновляют конфигурацию formLogin . Например, loginUrl определяет, куда Spring Security будет перенаправлять, если требуется вход в систему. По этой причине каждый из них является потомком formLogin .
- # 3 и означает, что мы закончили настройку родителя (в данном случае formLogin ). Это также подразумевает, что следующая строка уменьшит отступ на единицу. При просмотре конфигурации вы можете прочитать ее, так как http настроен с помощью formLogin и authorizeUrls . Если нам больше нечего настраивать, то и не нужно.
- # 4 Мы уменьшаем отступ с authorizeUrls, так как он не связан с входом в систему на основе форм. Вместо этого его целью является ограничение доступа к различным URL-адресам.
- # 5 каждый antMatchers и anyRequest изменяет требования авторизации для authorizeUrls . Вот почему каждый из них является потомком authorizeUrls
Средство форматирования IDE
Отступы могут вызвать проблемы с форматерами кода. Многие IDE позволят вам отключить форматирование для отдельных блоков кода с комментариями. Например, в STS / Eclipse вы можете использовать комментарии @formatter: off и @formatter: on для выключения и включения форматирования кода. Пример показан ниже:
// @formatter:off http .formLogin() .loginUrl("/login") .failureUrl("/login?error") .and() .authorizeUrls() .antMatchers("/signup","/about").permitAll() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated(); // @formatter:on
Чтобы эта функция работала, убедитесь, что она включена:
- Перейдите к Предпочтениям -> Java -> Стиль кода -> Форматтер
- Нажмите кнопку Изменить
- Выберите вкладку « Выкл. / Вкл. Метки »
- Убедитесь, что выбраны флажки «Включить / выключить»
- Вы также можете при желании изменить строки, используемые для отключения и включения форматирования.
- Нажмите ОК
Сравнение с пространством имен XML
Наши отступы также помогают нам связать конфигурацию Java с конфигурацией пространства имен XML. Это не всегда так, но это помогает. Давайте сравним нашу конфигурацию с соответствующей конфигурацией XML ниже.
http .formLogin() .loginPage("/login") .failureUrl("/login?error") .and() .authorizeUrls() .antMatchers("/signup","/about").permitAll() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated();
Соответствующую, но не эквивалентную, конфигурацию XML можно увидеть ниже. Обратите внимание, что различия между поведением Spring Security между этими конфигурациями обусловлены различными значениями по умолчанию для конфигурации Java и конфигурации XML.
<http use-expressions="true"> <form-login login-page="/login" authentication-failure-url="/login?error" /> <!-- similar to and() --> <intercept-url pattern="/signup" access="permitAll"/> <intercept-url pattern="/about" access="permitAll"/> <intercept-url pattern="/**" access="hasRole('ROLE_USER')"/> </http>
- Первое, что нужно отметить, это то, что http и <http> очень похожи. Одно из отличий состоит в том, что конфигурация Java использует authorizeUrls для указания use-expressions = «true»
- formLogin и <form-login> очень похожи. Каждый дочерний элемент formLogin является атрибутом XML <form-login> . Исходя из нашего объяснения отступов, сходство логично, поскольку атрибуты XML изменяют элементы XML.
- Форма и под formLogin очень похожа на завершение элемента XML.
- Каждый дочерний элемент authorizeUrls похож на каждый <intercept-urls> , за исключением того, что конфигурация Java по -разному определяет require-channel, что помогает уменьшить конфигурацию во многих случаях.
Теперь вы должны знать, как последовательно создавать отступ для вашей конфигурации Spring Security Java. Таким образом, ваш код будет более читабельным и его будет легче переводить в и из эквивалентов конфигурации XML.