是否Micronaut有像spring boot那样的内置登录表单?



Micronaut是否有一个与spring "formLogin"特性?

创建spring引导应用程序时,我们可以向@Configuration注释类添加方法(bean),如

@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;博士

您提到的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注释来保护你的控制器,或者在你的application.yml

中定义截获的url。
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());
}
});
}
}

这是一个良好的开端。

最新更新