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

2023-12-09

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

登录表单 bean:

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;
    }
}

Form:

<c:url value="/login" var="secureUrl"/>
<form:form id="jf" commandName="loginForm" action="${secureUrl}" method="post">
   <form:input path="j_username"/>
   <form:input path="j_password"/>
   <form:checkbox path="acceptTerms"/>
</form>

登录控制器:

@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");
}

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

<security:form-login
    authentication-failure-url="/login?error=1"
/>

那么你的网址就变成了url/login?error=1。然后自动signInPage方法将调用并带有一些错误值。现在错误不为空,您可以设置与 url 对应的任何字符串,我们可以使用以下标签在 jsp 上显示:

<c:if test="${not empty error}">
    <div class="error">${error}</div>
</c:if>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring Security 登录表单中进行额外验证? 的相关文章

随机推荐

  • 使 glReadPixel() 运行得更快

    我想要一种非常快速的方法来为我的应用程序捕获 openGL 帧缓冲区的内容 一般来说 glReadPixels 用于将framebuffer的内容读取到缓冲区中 但这很慢 我试图通过创建 4 个线程使用 glReadPixels 从 4 个
  • 为什么我的 ListView 和 CheckBox id 变得混乱?

    我正在女巫单元中实现带有复选框的 ListView 但问题是 当我签入一个单元格并向下滚动列表时 它会变得混乱 其他单元格也会被检查 我需要在 getView 方法中做其他事情吗 这是我的 CustonAdapter public clas
  • 选择矩阵中一行的一些值

    在带有矩阵的 R 中 m lt matrix 1 20 ncol 4 colnames m lt letters 1 4 如果我只想选择一个值 它就可以了 像这样 subset m m 4 17 但如果我想要 3 个值 就会出现错误 看这个
  • JSTL c:out 不显示变量的值

    我正在关注教程关于春天我应该在控制器中设置一个变量 以便在呈现请求的 jsp 中打印 代码如下 Controller public class HelloController RequestMapping value hello htm p
  • 使用超线程运行模拟使运行时间加倍

    我使用用 python numpy cython 编写的模拟 由于我需要对许多模拟运行进行平均 因此我使用多处理模块来批量运行所有单独的模拟运行 在办公室 我有一个带 HT 的 i7 920 工作站 我家里有一台 i5 560 没有 我认为
  • 无法从 Node Js 加载 Javascript 和 CSS 文件

    我读过很多关于 无法从节点js加载js和css文件 的问题 看起来像一个愚蠢的路径错误 但由于我是节点js新手 我无法弄清楚它 我的所有文件都位于一个名为 d3 的文件夹下 有什么想法哪里出了问题吗 var http require htt
  • 我有两个错误:“UIWebview”没有可见的@interface

    我有两个错误 UIWebView 没有可见的 interface 声明选择器 highlightAllOccurencesOfString 另一个 UIWebView 没有可见的 interface声明选择器 removeAllHighli
  • 如何:后退按钮支持“Ajax”

    我有一个asp net ajax网站 它充满了在同一页面上发生的事情 无需重新加载页面 例如排序记录 分页 当用户转到同一站点中的另一个页面并按浏览器后退按钮时 如何使浏览器保存页面状态以使用预选选项 例如排序选项 分页中的页码 返回到该页
  • 我可以从 Graphics 对象中获取矢量数据吗?

    在 Flash 10 播放器中 假设我加载了一个只有十几条随机线的 Sprite 有什么方法可以检查 Sprite 的图形对象并找出这些线的位置吗 目前 我有一个疯狂的工作 我将线条绘制到位图并检查位图 但这是粗糙且昂贵的 不 又是 没有特
  • 伪造 Entity Framework 4.1 的 DbContext 来测试我的存储库

    我有一个基本存储库 所有实体存储库都继承自该存储库 在我的睾丸中 我创建了一个 Fake DbContext 和 Fake DbSet 来测试我的存储库 但是在我的 FakeDbContext 中实现一些方法时 我无法实现IDbContex
  • Oracle针对不同条件的order by

    我有一个查询 我想根据条件进行两种订单 例如 如果一个字段为 NULL 我需要下一个订单 如果不是 我必须下一个订单 我怎样才能做到呢 select from table 1 t order by if t field1 is null t
  • 单子、组成和计算顺序

    所有 monad 文章经常指出 monad 允许您按顺序对效果进行排序 但是简单的构图又如何呢 不是 f x x 1 g x x 2 result f g x 需要g x之前要计算f 单子是否做同样的事情 但处理效果 免责声明 单子有很多东
  • 修改表中的列

    我有下表test iD Name ParentId GroupID 1 1 Null 2 1 Null 3 1 Null 4 7 Null 5 7 Null 6 7 Null 7 9 Null 我怎样才能修改它来获取列GroupID像这样
  • JQUERY ajax 将值从 MVC 视图传递到控制器

    我想要的是将 txt Comments 的值从视图 使用 jquery ajax 传递到控制器 问题是 ajax jquery 不接受脚本标签作为字符串 意思是 当我在 txtComments 中输入任何 script html 标签时 a
  • LINQ Any 与 FirstOrDefault 的性能 != null

    我贡献的开源项目 OSP 代码中有多个地方必须确定集合中的元素是否满足特定条件 我见过LINQ表达式的使用Any lambda expression 在某些情况下和FirstOrDefault lambda expression null在
  • Ionic 隐藏导航栏而不是按钮

    我正在尝试寻找一种可能的方法来隐藏离子ion nav bar不隐藏ion nav barbuttons 我努力了 hide nav bar true 但它也隐藏了按钮 我已经搜索过并且也参考过this 但没有解决我的问题 问候 你只需要指定
  • 用于编辑源代码的 Docker 安装卷

    我的 Windows 系统上有 docker 设置 该应用程序的源代码位于C Application source地点 我希望这些信息在 docker 容器中可用 以便在开发过程中轻松更改代码 而无需重建映像 这就是我尝试过的 docker
  • 玩笑测试为 eventemitter 对象发出事件(express)

    试图从中获得灵感玩笑测试为 eventemitter 对象发出事件 http 没有解决我的痛苦express 假设有以下nodejs代码 server js const express require express const app e
  • 迁移到 Firebase Cloud Messaging:导入现有 Google 项目会对项目产生什么影响?

    In 设置 FCM它说 如果没有 请在 Firebase 控制台中创建一个 Firebase 项目 已经有一个了 如果您已经有一个现有的 Google 项目 与您的移动应用程序关联 单击导入 Google 项目 否则 单击 创建新项目 我有
  • 如何在 Spring Security 登录表单中进行额外验证?

    我想知道如何在 Spring Security 处理登录表单之前对其进行额外的验证 我正在考虑一些 LoginController LoginForm bean 但我不知道如何将它们组合在一起 如何配置它来工作 下面是我的 愿景 我搜索了一