在自定义登录页面中登录后找不到 404 页面

时间:2021-06-06 08:32:34

标签: spring spring-mvc spring-security

我是 Spring 新手,正在尝试实现自定义登录页面。我可以重定向到自定义登录页面,但是当我点击页面中的提交按钮时,它会出现错误 404。网址转到:http://localhost:12345/login?username=abcd&password=qwer

这是我的 htm、控制器和安全配置的代码:

SecurityConfig.java

http
    .authorizeRequests()
    .antMatchers("/main",
            "/main#/home",
            "/login**",
            "/resources/**",
            "/css/**",
            "/images/**",
            "/js/**",
            "/std/**",
            "/system/**",
            "/favicon.ico",
            "/rest/**",
            "/rest/user/**" ).permitAll()
    .anyRequest().authenticated()
    .and().csrf().disable()
    .formLogin()
    .loginPage("/main#/login").permitAll()
    .defaultSuccessUrl("/main#/home")
    .failureUrl("/main#/page/b").permitAll();

LoginController.Java

@RestController
@RequestMapping(value = "/rest/user")
public class LoginController 
{
    
    @RequestMapping(value = "login")
    public String login(Model model, String error, String logout) {
        if (error != null)
            model.addAttribute("errorMsg", "Your username and password are invalid.");

        if (logout != null)
            model.addAttribute("msg", "You have been logged out successfully.");

        return "login";
    }
}

登录内容.htm

<div class="col-md-6 col-md-offset-3">
<h2>Login</h2>
<form name="form" action="/login" ng-controller="LoginController" role="form">
    
    <div class="form-group" ng-class="{ 'has-error': form.username.$dirty && form.username.$error.required }">
        <label for="username">Username</label>
        <input type="text" name="username" id="username" class="form-control" ng-model="user.username" required />
        <span ng-show="form.username.$dirty && form.username.$error.required" class="help-block">Username is required</span>
    </div>
    <div class="form-group" ng-class="{ 'has-error': form.password.$dirty && form.password.$error.required }">
        <label for="password">Password</label>
        <input type="password" name="password" id="password" class="form-control" ng-model="user.password" required />
        <span ng-show="form.password.$dirty && form.password.$error.required" class="help-block">password is required</span>
    </div>

    <input type="submit" ng-click="login(user)" value="Submit">
</form>

谢谢!

1 个答案:

答案 0 :(得分:0)

最后,我将 Login-content.htm 中的“action”修改为另一个词(例如 perform_login),并在 SecurityConfig.java 中添加了 .loginProcessingUrl("/perform_login").permitAll()。

此外,另一个问题是 Spring Security 需要有一个特定的 POST 方法来验证它。我在 HTM 页面中添加了 method="POST"。

谢谢!