Java Spring安全性:使用自定义验证器和自定义登录页面

Java Spring安全性:使用自定义验证器和自定义登录页面,java,spring,spring-boot,spring-security,Java,Spring,Spring Boot,Spring Security,我尝试使用Spring Boot安全性执行第一步 我尝试将自定义验证器与自定义登录页结合起来,但我不确定如何将它们结合起来。 这两种方法都很有效 我的自定义身份验证程序(Auth) 我的/login处理程序(login) 如果我没有使用自定义登录页(.loginpage等,则我的自定义验证器正在使用,并且内置登录页确实会出现 如果我使用的是自定义登录页面,那么将使用我的custom login.jsp,但我看不到自定义验证器的用法。但是调用了/login的处理程序 那么,定制验证器和custon

我尝试使用Spring Boot安全性执行第一步

我尝试将自定义验证器与自定义登录页结合起来,但我不确定如何将它们结合起来。 这两种方法都很有效

我的自定义身份验证程序(Auth)

我的/login处理程序(login)

如果我没有使用自定义登录页(.loginpage等,则我的自定义验证器正在使用,并且内置登录页确实会出现

如果我使用的是自定义登录页面,那么将使用我的custom login.jsp,但我看不到自定义验证器的用法。但是调用了/login的处理程序

那么,定制验证器和custon登录页面的组合是否应该开箱即用 我是否需要将它们粘在一起(可能在登录处理程序中)

编辑

login.jsp

<html>
    <body>
        MyLogin
        <form action="/security_check" method="post">               
            username<input type="text" id="username" name="username"/>        
            <br/>
            password<input type="password" id="password" name="password"/>    
            <br/>
            <input type="submit" value="login"/>
        </form>
   </body>
</html>

您的自定义验证器配置正确。问题在于您的自定义登录页面

因此,您的自定义登录页面应该至少包含一个带有两个字段的表单:用户名和密码,以及一个url的POST操作,比如“/security\u check”,spring security将处理用户名和密码。在spring安全配置中,您将其配置为loginProcessingUrl,如下所示:

.formLogin().loginPage("/login").loginProcessingUrl("/security_check").permitAll();
当然,您也可以像现在这样指定username参数、password参数

usernameParameter("username").passwordParameter("password")

您缺少的部分是loginProcessingUrl,它将您的自定义登录页面与spring security挂钩,它将使用您的自定义验证器对用户进行身份验证。

发现只有在登录页面中有隐藏信息时,它才起作用

<input type="hidden"
        name="${_csrf.parameterName}"
        value="${_csrf.token}"/>
在配置中-仅此而已

不知道为什么,但我接受了

我从:

我是否需要自己实现安全检查处理程序?需要表单操作指向安全检查吗?不,您不需要toI添加my login.jsp和更改安全配置。自定义验证器仍然没有调用:-(然后找不到登录页。我有jsp的spring引导配置。找到了我的登录页,但没有调用自定义验证器。对/security\u check的请求在My browser-logs.Hmm之后发送,您能从配置中删除:antMatchers(“/sec*”).permitAll()吗?
http.authorizeRequests ()
    .antMatchers ("/sec*").permitAll ()
    .anyRequest ().authenticated ()
    .and ()
    .formLogin ().loginPage("/login").loginProcessingUrl("/security_check")
    .permitAll ();
.formLogin().loginPage("/login").loginProcessingUrl("/security_check").permitAll();
usernameParameter("username").passwordParameter("password")
<input type="hidden"
        name="${_csrf.parameterName}"
        value="${_csrf.token}"/>
formLogin ().loginPage("/login")