我目前正在创建一个Spring webapp,允许用户登录,注册和添加书籍。目前,当用户注册(即填写表单并单击“提交”按钮)时,页面将加载登录页面,而不是注册用户(进入mySQL数据库)并打开其个人资料页面。控制器中的所有内容都告诉我寄存器功能应该有效,但由于某种原因我无法弄清楚它只是提示加载登录屏幕,因此寄存器不起作用。我在registerUser
控制器方法中包含了一个调试器,它没有打印任何内容,这让我相信请求根本没有被发送到控制器。这可能是WebSecurityConfig
或MvcConfig
文件的问题以及它们的映射/配置方式。我会在下面提供相关的代码片段。
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>
答案 0 :(得分:0)
当您使用viewController
时,您不应该使用通用控制器,反之亦然。
当没有Java控制器逻辑时,在静态情况下使用它 在视图生成响应之前执行。
您必须返回视图名称,不要返回路径。
"/register"
不正确。
如果你使用Spring MVC添加@EnableWebMvc
注释,如果Spring Boot确保在类路径中存在SpringMvc。春天必须配置映射feauteres。