Параметры запроса FreeFmark + WebFlux + недоступны - PullRequest
0 голосов
/ 23 апреля 2020

Нет параметров запроса, когда я пытаюсь сделать пост-запрос для / регистрации, я не могу ввести значения из формы,

Весной 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);
    }



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...