Spring Web Application

时间:2018-04-05 18:24:11

标签: html spring

我目前正在创建一个Spring webapp,允许用户登录,注册和添加书籍。目前,当用户注册(即填写表单并单击“提交”按钮)时,页面将加载登录页面,而不是注册用户(进入mySQL数据库)并打开其个人资料页面。控制器中的所有内容都告诉我寄存器功能应该有效,但由于某种原因我无法弄清楚它只是提示加载登录屏幕,因此寄存器不起作用。我在registerUser控制器方法中包含了一个调试器,它没有打印任何内容,这让我相信请求根本没有被发送到控制器。这可能是WebSecurityConfigMvcConfig文件的问题以及它们的映射/配置方式。我会在下面提供相关的代码片段。

WebSecurityConfig

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/resources/**", "/register").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }

MvcConfig

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/hello").setViewName("hello");
        registry.addViewController("/login").setViewName("login");
        registry.addViewController("/register").setViewName("register");
        registry.addViewController("/profile").setViewName("profile");


    }

}

BookController的

@RequestMapping(value="/register", method=RequestMethod.GET)
public String register(User user) {
    return "/register";
}

@RequestMapping(value="/registerUser", method=RequestMethod.POST) //name of url... this is what i call. 
public String registerUser(@Valid User user, Model model, BindingResult errors) {
    System.out.println("User" + user);
    userR.save(user); 
    return "hello";
}


@RequestMapping(value= "/login")
public String login() {
    return "login"; 
}

这是我试图通过控制器运行的表单。 的 register.html

<form action="#" th:action="@{/registerUser}" method="post" th:object="${user}" >
    <table>
        <tr>
            <td>UserName:</td>
            <td><input type="text" th:field="*{userName}" /></td>
        </tr>
        <tr>
            <td>Password:</td>
            <td><input type="text" th:field="*{password}" /></td>
        </tr>
        <tr>
            <td><button type="submit">Submit</button></td>
        </tr>
    </table>
      Already have an account? <a href="/login">Click here</a> to log in.

</form>

1 个答案:

答案 0 :(得分:0)

当您使用viewController时,您不应该使用通用控制器,反之亦然。

  

当没有Java控制器逻辑时,在静态情况下使用它   在视图生成响应之前执行。

您必须返回视图名称,不要返回路径。

"/register"

不正确。 如果你使用Spring MVC添加@EnableWebMvc注释,如果Spring Boot确保在类路径中存在SpringMvc。春天必须配置映射feauteres。