Есть ли у Micronaut встроенная форма входа в систему, как у весенней загрузки?

Есть ли у Micronaut эквивалент функции spring «formLogin»?

При создании приложения Spring Boot мы можем добавить метод (bean) в аннотированный класс @Configuration, например

@Bean 
public SecurityFilterChain sfc(HttpSecurity s) { 
   return s.csrf()
     .disable()
     .authorizeRequests().antMatchers("/**").authenticated()
     .formLogin()
     .build(); 
}

И этого достаточно, чтобы защитить мое приложение, а пароль будет сверяться с переменными среды SPRING_SECURITY_USER_{NAME,PASSWORD}. Это позволяет очень легко добавить безопасность к приложению.

Было любопытно, есть ли у проекта Micronaut аналогичный способ запуска и работы с помощью пары строк кода.

Обновлено: он также отображает эту форму с помощью bootstrap css: https://github.com/spring-projects/spring-security/blob/main/web/src/main/java/org/springframework/security/web/authentication /ui/DefaultLoginPageGeneratingFilter.java

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Все, что вам нужно сделать в Micronaut, — это выполнить шаги, описанные в Руководстве по безопасности Micronaut.

TL;DR

Упомянутая вами функция Spring Boot недоступна в Micronaut. Но следующие простые шаги помогут добраться туда как можно ближе.

В основном это следующие шаги:

  • Добавьте эти зависимости в свой build.gradle
annotationProcessor("io.micronaut.security:micronaut-security-annotations")
implementation("io.micronaut.security:micronaut-security-jwt")
  • Тогда безопасность включена по умолчанию, но вы можете настроить это, изменив свой application.yml
micronaut:
   security:
      enabled: true # true is the default value

Вы можете защитить свой контроллер с помощью аннотации @Secured или определить перехваченные URL-адреса в своем application.yml

micronaut:
  security:
    basic-auth:
      enabled: true # enabled basic authentication
    intercept-url-map:
      - pattern: /**
        access:
          - isAuthenticated()

Затем вы пишете простой провайдер аутентификации, который выполняет проверку входа.

import io.micronaut.context.annotation.Requires;
import io.micronaut.http.HttpRequest;
import io.micronaut.security.authentication.AuthenticationProvider;
import io.micronaut.security.authentication.AuthenticationRequest;
import io.micronaut.security.authentication.AuthenticationResponse;
import jakarta.inject.Singleton;
import org.reactivestreams.Publisher;
import reactor.core.publisher.Mono;
@Singleton
public class AuthenticationProviderUserPassword implements AuthenticationProvider {

    @Override
    public Publisher<AuthenticationResponse> authenticate(HttpRequest<?> httpRequest, AuthenticationRequest<?, ?> authenticationRequest) {
        return Mono.<AuthenticationResponse>create(emitter -> {
            if (authenticationRequest.getIdentity().equals(System.getenv("YOUR-USER")) && authenticationRequest.getSecret().equals(System.getenv("YOUR-PWD"))) {
                emitter.success(AuthenticationResponse.success("user"));
            } else {
                emitter.error(AuthenticationResponse.exception());
            }
        });
    }
}

Это делает работу для хорошего начала.

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

Dave Ankin 18.12.2022 21:21

Я обновил свой ответ. Функция, которую вы описываете, отсутствует в Micronaut.

saw303 18.12.2022 21:30

хорошо, круто, я принял ответ, не хотел изобретать велосипед, но, думаю, теперь я все равно делаю совершенно новое колесо :)

Dave Ankin 18.12.2022 21:34

Другие вопросы по теме