一,什么是幂等性? 1,幂等: 幂等操作:不管执行多少次,所产生的影响都和一次执行的影响相同. 幂等函数或幂等方法:可以使用相同的参数重复执行,并能获得相同的结果的函数/方法. 这些函数/方法不用担心重复执行会对系统造成改变. 2,幂等操作的一些例子: 前端重复提交相同的数据,后台只产生对应这个数据的一个相同的反应结果 发送验证码短信:应该只发一次,相同的验证短信不能多次发送. 生成订单:一个业务请求只能创建一个订单,不能重复创建相同的订单 用户付款:只能扣用户一次钱,不能重复扣费 3,实现幂等…
Spring Security默认的用户登录表单 页面源代码 <html><head><title>Login Page</title></head><body onload='document.f.j_username.focus();'> <h3>Login with Username and Password</h3><form name='f' action='/spring-security-s…
一,为什么要限制短信验证码的发送频率? 1,短信验证码每条短信都有成本制约, 肯定不能被刷接口的乱发 而且接口被刷会影响到用户的体验, 影响服务端的正常访问, 所以既使有图形验证码等的保护, 我们仍然要限制短信验证码的发送频率 2,演示项目中我使用的数值是: 同一手机号60秒内禁止重复发送 同一手机号一天时间最多发10条 验证码的有效时间是300秒 大家可以根据自己的业务需求进行调整 3,生产环境中使用时对表单还需要添加参数的验证/反csrf/表单的幂等检验等, 本文仅供参考 说明:刘宏缔的架构…
表单验证分为前端验证和服务器端验证.服务器端验证方面,Java提供了主要用于数据验证的JSR 303规范,而Hibernate Validator实现了JSR 303规范.项目依赖加入spring-boot-starter-thymeleaf时,默认就会加入Hibernate Validator的依赖. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 新建一个名称为demo的Spring Boot项目. 1.pom.xml <dependency>…
第一节:SpringBoot 之表单验证@Valid 是spring-data-jpa的功能:   下面是添加学生的信息例子,要求姓名不能为空,年龄大于18岁.   贴下代码吧: Student实体: package com.cy.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persis…
一.使用方法 1.要使用Spring MVC提供的表单标签,首先需要在视图页面添加: <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 2.form标签: <form:form modelAttribute="contentModel" method="post"> modelAttribute属性指定该…
前面三篇讲解了spring security的搭建以及简单的表单认证与授权原理.本篇将实现我们自定义的表单登录与认证.  本篇不会再讲项目的搭建过程,因为跟第二节的搭建如出一辙.本篇也不会将项目中所有的代码全部给出,因为代码量有点大.项目的代码被放在了github上,请拉下来根据讲解去看代码,代码的注释写的也比较详细.github地址https://github.com/wutianqi/spring_security_extend.git.另外,因为项目中使用了mysql数据库,对于表结构和数…
通过前面三篇文章,你应该大致了解了 Spring Security 的流程.你应该发现了,真正的 login 请求是由 Spring Security 帮我们处理的,那么我们如何实现自定义表单登录呢,比如添加一个验证码… 源码地址:https://github.com/jitwxs/blog_sample 文章目录 一.添加验证码 1.1 验证码 Servlet 1.2 修改 login.html 1.3 添加匿名访问 Url二.AJAX 验证三.过滤器验证 3.1 编写验证码过滤器 3.2 注…
在Spring MVC中提供了验证器可以进行服务端校验,所有的验证都必须先注册校验器,不过校验器也是Spring MVC自动加载的,在使用Spring MVC校验器之前首先要下载相关的jar包,下面是我的一些jar所对应的maven依赖: <!-- 验证器所需的包 --> <dependency> <groupId>com.fasterxml</groupId> <artifactId>classmate</artifactId> &…
1.JSP表单 <% String basePath = request.getScheme() + "://" + request.getServerName() +":"+ request.getServerPort() + request.getContextPath() + "/"; %> <script language="javascript" type="text/javascript…