java - 单击提交按钮时不执行任何操作,但应该注册用户

标签 java spring jsp spring-security

我正在尝试创建一个简单的注册和登录系统。当我尝试注册用户时,我向输入提供了所有信息,例如用户名、密码和确认密码,但是当我点击提交按钮时,它会将我重定向到/login,即使它应该是/welcome 页面,正如我在 Controller 。当我在特定映射的 Controller 中添加简单的调试时,没有任何反应,我想该方法甚至没有执行,有人可以看一下这段代码并告诉我这里出了什么问题吗?


@Controller
public class UserController {

    private UserService userService;
    private SecurityService securityService;

    @Autowired
    public UserController(UserService userService, SecurityService securityService) {
        this.userService = userService;
        this.securityService = securityService;
    }

    @RequestMapping(value = "/registration", method = RequestMethod.GET)
    public String registration(Model model) {
//        model.addAttribute("user", new User());
//
        return "registration";
    }

    @RequestMapping(value = "/registration", method = RequestMethod.POST)
    public String registration(@RequestParam("username") String username, @RequestParam("password")
                               String password, @RequestParam("confirmPassword") String confirmPassword,
                               Model model, HttpServletRequest request) {

        User foundUser = userService.findByUsername(username);
        if (foundUser != null) {
            model.addAttribute("msgError", "That user already exists");
            return "registration";
        }

        if (username.equals("") || username.length() < 2) {
            model.addAttribute("msgError", "Wrong username");
            return "registration";
        }

        if (!password.equals(confirmPassword)) {
            model.addAttribute("msgError", "Passwords can not be different");
            return "registration";
        }

        User user = new User(request.getParameter("username"), request.getParameter("password"), request.getParameter("confirmPassword"));

        securityService.autoLogin(username, password);

        userService.addUser(user);
        model.addAttribute("msgSuccess", "User registered successfully");
        return "redirect:/welcome";
    }

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login(Model model, String error, String logout) {
        if (error != null)
            model.addAttribute("msgError", "Your username and password is invalid");
        if (logout != null)
            model.addAttribute("msgError", "You have been logged out successfully");

        return "login";
    }
}

注册JSP如下

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Watchers - Registration</title>
</head>
<body>
    <div class="container">
        <form method="POST" action="registration" class="sign-form">
            <h2 class="sign-form-heading">Create an new account</h2>
            <p><input type="text" name="username" /></p>
            <p><input type="text" name="password" /></p>
            <p><input type="text" name="confirmPassword" /></p>
            <input type="submit" value="Submit" />
        </form>
    </div>
</body>
</html>

最佳答案

我认为这是因为您的表单action-value。

尝试使用spring的taglib准备action值 在这个例子中它有前缀 spring

<spring:url value="/registration" var="url"/>
<form method="POST" action="${url}" class="sign-form">

编辑:

根据您的评论,我想问几个问题:

如何使用 web.xml 中的 spring-security 或 security-constraints 来保护/保护您的 Web 应用程序?

/registration路径也受到保护/安全吗?如果是,并且您的登录配置引用了 /login,您将被重定向到 /login

关于java - 单击提交按钮时不执行任何操作,但应该注册用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56546911/

相关文章:

java - 在 IntelliJ GUI Builder 中打开现有源代码

java - REST Web 应用程序中的 Spring 3 MVC 示例在哪里下载?

java - JSP 表达式语言和动态属性名称

windows - 使用 Windows 搜索以 jsp 结尾的文件

Java Web 应用程序国际化 : Where should I store big texts?

java - 为什么 Swing 线程模型被认为是错误的,它应该如何?

java - maven - 两个不同的根 pom

java - 如何在没有用户交互的情况下将 pdf 打印到特定托盘

spring - 使用 Spring 的 JSR-303 约束验证器中的依赖注入(inject)失败

spring - Tomcat [9.0.26] - 调用安全服务 - TrustStore 与 KeyStore 配置差异和问题