Есть ли у 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
Все, что вам нужно сделать в 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.
хорошо, круто, я принял ответ, не хотел изобретать велосипед, но, думаю, теперь я все равно делаю совершенно новое колесо :)
спасибо за ответ, я видел это руководство на веб-сайте micronaut, но меня в основном интересовала часть формы - я отредактировал свой вопрос, чтобы связать его с кодом генерации формы html весной.