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
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());
}
});
}
}
这是一个良好的开端。