Spring mvc 如何在Spring安全登录表单中进行额外验证?

Spring mvc 如何在Spring安全登录表单中进行额外验证?,spring-mvc,spring-security,Spring Mvc,Spring Security,我想知道如何在Spring Security处理登录表单之前对其进行额外的验证。我正在考虑一些LoginController,LoginFormBean,但我不知道如何将其组合在一起,如何配置它来工作。下面是我的“愿景”。我搜索了一些如何在SpringSecurity中实现这一点的示例,但没有找到。有人帮忙吗 loginformbean: public class LoginForm { private String j_username; private String j_pa

我想知道如何在Spring Security处理登录表单之前对其进行额外的验证。我正在考虑一些LoginController,LoginFormBean,但我不知道如何将其组合在一起,如何配置它来工作。下面是我的“愿景”。我搜索了一些如何在SpringSecurity中实现这一点的示例,但没有找到。有人帮忙吗

loginformbean:

public class LoginForm {
    private String j_username;
    private String j_password;
    @NotEmpty
    private Boolean acceptTerms;

    public String getJ_password() {
        return j_password;
    }

    public String getJ_username() {
        return j_username;
    }

    public void setJ_password(String j_password) {
        this.j_password = j_password;
    }

    public void setJ_username(String j_username) {
        this.j_username = j_username;
    }

    public Boolean getAcceptTerms() {
        return acceptTerms;
    }

    public void setAcceptTerms(Boolean accept) {
        this.acceptTerms = acceptTerms;
    }
}
表格:


您可以将UsernamePasswordAuthenticationFilter子类化:

您可以重写attemptAuthentication()方法,让它调用super.attemptAuthentication(),如果它返回一个非空的身份验证对象,则执行其他工作(查看用户是否选中了该框)

,javax.servlet.http.HttpServletResponse)

有关如何指定客户筛选器的文档如下:


只需在@sdouglass评论顶部添加更多信息

在筛选器上,您将无法出于绑定目的访问表单

通过执行以下操作,我成功地通过默认验证获得了它

现在,如果登录变得不成功,那么它将再次点击这个URL,并在其URL中添加错误,就像在spring安全文件中设置失败URL一样。Spring安全文件:

<security:form-login
    authentication-failure-url="/login?error=1"
/>
@Controller
class LoginController {
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String logging(@ModelAttribute @Valid LoginForm loginForm) {
                ...
    }
}
@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView signInPage(
                    @RequestParam(value = "error", required = false) String error,
                    @RequestParam(value = "logout", required = false) String logout) 
{
    ModelAndView mav = new ModelAndView();
    //Initially when you hit on login url then error and logout both null
    if (error != null) {
        mav.addObject("error", "Invalid username and password!");
    }

    if (logout != null) {
        mav.addObject("msg", "You've been logged out successfully.");
    }
    mav.setViewName("login/login.jsp");
}
<security:form-login
    authentication-failure-url="/login?error=1"
/>
<c:if test="${not empty error}">
    <div class="error">${error}</div>
</c:if>