Нет параметров запроса, когда я пытаюсь сделать пост-запрос для / регистрации, я не могу ввести значения из формы,
Весной mvc приложение по умолчанию, которое работает, но в приложении webflux есть нет параметров запроса из формы ввода, когда
Я делаю пост-запрос
registration.ftl:
<form action="/registration" method="post">
<div class="form-group">
<label class="col-sm-2 col-form-label"> User Name : </label>
<div class="col-sm-6">
<input type="text" id="username" name="username" class="form-control" placeholder="User Name"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 col-form-label"> Password : </label>
<div class="col-sm-6">
<input type="password" id="password" name="password" class="form-control" placeholder="Password"/>
</div>
</div>
<input type="hidden" name="_csrf" value="${_csrf.getToken()}"/>
<div class="form-group">
<div class="col-sm-20">
<button class="btn btn-primary" type="submit">Sign In</button>
</div>
</div>
</form>
Обработчики:
public Mono<ServerResponse> registrationPost(ServerRequest serverRequest){
Set<String> stringSet = serverRequest.queryParams().keySet();
for(String s:stringSet){
logger.info(s+": "+serverRequest.queryParams().get(s));
}
String username = (String) serverRequest.queryParam("username").get();
String password = (String) serverRequest.queryParam("password").get();
User user = new User();
user.setUser_avatar("default.jpg");
user.setUsername(username);
user.setPassword(passwordEncoder.encode(password));
Mono<User> userFromDb = userService.findByUserName(user.getUsername());
AtomicBoolean atomicBoolean = new AtomicBoolean(false);
userFromDb.subscribe(u->{
if(u!=null) atomicBoolean.set(true);
});
if(atomicBoolean.get()){
logger.info("user from db exists");
return ServerResponse.badRequest().build();
} else {
Mono<User> save = userService.save(user);
save.subscribe(u->{
logger.info("user successfully created");
});
return ServerResponse.temporaryRedirect(URI.create("/login")).build();
}
}
stacktrace
websecurity и web mvc конфиги:
@Configuration
@EnableWebFluxSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@ComponentScan(basePackages = "com.server")
public class WebSecurityConfig extends ReactiveSecurityAutoConfiguration {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
public SecurityWebFilterChain springSecurityFilterChain(
ServerHttpSecurity http) {
return http.csrf()
.and().authorizeExchange()
.pathMatchers("/login", "/registration").permitAll()
.anyExchange()
.authenticated()
.and().formLogin().loginPage("/login")
.and().logout().logoutUrl("/logout")
.and().build();
}
}
@EnableWebFlux
@Configuration
public class WebMvc implements WebFluxConfigurer {
private Logger logger = LoggerFactory.getLogger(WebMvc.class);
@Value("${upload.path}")
private String uploadPath;
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPaths("classpath:/templates/");
return configurer;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.freeMarker().suffix(".ftl");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/img/**").addResourceLocations("file:///" + uploadPath + "/");
registry.addResourceHandler("/").addResourceLocations("classpath:/templates/");
}
}
@Configuration
public class MainRouter {
@Bean
public RouterFunction<ServerResponse> mainRoute(MainHandler mainHandler){
RequestPredicate get = GET("/news");
RequestPredicate login = GET("/login");
RequestPredicate friends = GET("/friends");
RequestPredicate registrationGet = GET("/registration");
RequestPredicate registrationPost = POST("/registration");
return route(get, mainHandler::news)
.andRoute(login, mainHandler::login)
.andRoute(friends, mainHandler::friends)
.andRoute(registrationGet, mainHandler::registrationGet).andRoute(registrationPost, mainHandler::registrationPost);
}
}