簡體   English   中英

單擊提交按鈕時無操作,但應注冊用戶

[英]No action when submit button is clicked, but it should register a user

我正在嘗試創建一個簡單的注冊和登錄系統。 當我嘗試注冊用戶時,我提供了輸入的所有信息,例如用戶名,密碼和確認密碼,但是當我點擊提交按鈕時,它會將我重定向到/ login,即使它應該是/ welcome頁面,因為我在控制器。 當我在特定映射中的控制器中添加一個簡單的調試時,沒有發生任何事情,我認為該方法甚至沒有執行,有人可以看一下這段代碼並告訴我這里有什么問題嗎?


@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值。

嘗試使用spring的taglib准備動作值,在此示例中,它獲得了前綴spring

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

編輯:

提到你的評論,我要問幾個問題:

如何使用web.xml中的spring-security或security-constraints來保護/保護您的Web應用程序?

/registration -path是否也受到保護/保護? 如果是,如果您的login-config引用/login ,您將被重定向到/login

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM