实现短信验证码登录 开发短信验证码接口 校验短信验证码并登录 短信验证码和图片验证码开发思路类似: 1,我们访问一个controller 2,在controller里调用短信验证码生成接口生成验证码 3,验证码存进session 4,从请求里获取手机号,调用短信发送服务商的接口,给手机号发送短信 主要代码: 1,短信验证码Controller: package com.imooc.security.core.validate.code; import java.io.IOException; i…
php实现的IMEI限制的短信验证码发送类 <?php class Api_Sms{ const EXPIRE_SEC = 1800; // 过期时间间隔 const RESEND_SEC = 60; // 重发时间间隔 const ONE_DAY_FREQ = 5; // 每日向同一个手机号发短信的次数 const ONE_DAY_IMEI_COUNT = 3; // 每日向同一个手机号发送短信的IMEI个数 public $error = array(); /** * 向指定手机号发送验证码…
PHP实现对短信验证码发送限制(防止机刷验证码) 对用户获取短信验证码的手机号.ip.和浏览器(使用唯一标识)进行限制.本文介绍的方法是对用户每天只能通过同一浏览器或同一ip地址获取验证码10次或者同一手机号只能获取3次短信验证码,三种限制为“或”关系,一条超限就不发验证码.方法是通过在服务器端将用户的手机号.ip.ur_r记录并写入文件,再通过读取文件记录判断用户请求发送验证码的次数来做限制.方法如下: 获取短信验证码页面: <!DOCTYPE html> <html> <…
浏览器模式下验证码存储策略 浏览器模式下,生成的短信验证码或者图形验证码是存在session里的,用户接收到验证码后携带过来做校验. APP模式下验证码存储策略 在app场景下里是没有cookie信息的,请求里也就没有JSESSIONID,所以即使生成了验证码存在session里,你也接收到了验证码,但是没有JSEESIONID,校验你带过来的验证码时,会找不到对应的session,所以不能用session来存储验证码. 解决:在 生成 和 校验验证码的时候多带一个参数 ,设备id,生成验证码时…
先来看下 Spring Security密码登录大概流程,模拟这个流程,开发短信登录流程 1,密码登录请求发送给过滤器 UsernamePasswordAuthenticationFilter 2,过滤器拿出用户名密码组装成 UsernamePasswordAuthenticationToken 对象传给AuthenticationManager 3,AuthenticationManager 会从一堆 AuthenticationProvider 里选出一个Provider 处理认证请求.挑选…
SpringSecurityOAuth核心源码解析 蓝色表示接口,绿色表示类 1,TokenEndpoint 整个入口点,相当于一个controller,不同的授权模式获取token的地址都是 /oauth/token ,通过grant_type 参数标识不同的授权类型,这个类就是判断授权类型 grant_type的. 2,TokenEndpoint收到请求后先调用 ClientDetailsService 读取第三方应用的信息.client_id.client_secret 来获取不同的第三方…
实现服务提供商,就是要实现认证服务器.资源服务器. 现在做的都是app的东西,所以在app项目写代码  认证服务器: 新建 ImoocAuthenticationServerConfig 类,@EnableAuthorizationServer 注解就说明该项目是一个 认证服务器: @Configuration @EnableAuthorizationServer //这个注解就是实现了一个认证服务器 public class ImoocAuthenticationServerConfig {…
基于服务器Session的认证方式: 前边说的用户名密码登录.短信登录.第三方登录,都是普通的登录,是基于服务器Session保存用户信息的登录方式.登录信息都是存在服务器的session(服务器的一块内存)里 ,用户通过浏览器访问服务的时候,每一次服务器都会检查浏览器的cookie里有没有JESSIONID,如果不存在JESSIONID服务器会新建一个session,将新建的session的id写到浏览器的cookie里.服务器每次都会从请求里拿出JSESSIONID,然后去找对应的sessi…
验证码逻辑 以前在项目中也做过验证码,生成验证码的代码网上有很多,也有一些第三方的jar包也可以生成漂亮的验证码.验证码逻辑很简单,就是在登录页放一个image标签,src指向一个controller,这个Controller返回把生成的图片以输出流返回给页面,生成图片的同时把图片上的文本放在session,登录的时候带过来输入的验证码,从session中取出,两者对比.这位老师讲的用Spring Security集成验证码,大体思路和我说的一样,但更加规范和通用些. spring securi…
Session失效时间: springboot配置session失效时间,只需要在application.properties里配置 #session超时时间,低于60秒按60秒server.session.timeout = 60 如果想自己定义session失效的提示信息,需要配置: @Configuration //这是一个配置 public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter{ //版本二:可配…
一,为什么要限制短信验证码的发送频率? 1,短信验证码每条短信都有成本制约, 肯定不能被刷接口的乱发 而且接口被刷会影响到用户的体验, 影响服务端的正常访问, 所以既使有图形验证码等的保护, 我们仍然要限制短信验证码的发送频率 2,演示项目中我使用的数值是: 同一手机号60秒内禁止重复发送 同一手机号一天时间最多发10条 验证码的有效时间是300秒 大家可以根据自己的业务需求进行调整 3,生产环境中使用时对表单还需要添加参数的验证/反csrf/表单的幂等检验等, 本文仅供参考 说明:刘宏缔的架构…
我在在众多的第三方短信服务商里选择了云片网这个短信服务商,我也会尽可能利用最简单的方式去帮助广大开发者解决短信验证码功能模块的实现. 再次之前我也参考了大部分网上的博客等,大多数都是把云片网的demo原封不动搬上去,对于我这个前端人员来说,根本毫无头绪,故此我将细致的讲解如何操作,以及献上我的源码. 我的业务流程就是通过点击发送验证码这个按钮,触发一个ajax请求事件,将手机号发送到后台,后台生成验证码发送到手机端,并返回这个验证码给前台进行验证码的验证. 请求的php后端代码如下 post.p…
http://www.jb51.net/article/94878.htm 对用户获取短信验证码的手机号.ip.和浏览器(使用唯一标识)进行限制.本文介绍的方法是对用户每天只能通过同一浏览器或同一ip地址获取验证码10次或者同一手机号只能获取3次短信验证码,三种限制为“或”关系,一条超限就不发验证码.方法是通过在服务器端将用户的手机号.ip.ur_r记录并写入文件,再通过读取文件记录判断用户请求发送验证码的次数来做限制.方法如下: 获取短信验证码页面: <!DOCTYPE html><h…
基于JWT实现SSO 在淘宝( https://www.taobao.com )上点击登录,已经跳到了 https://login.taobao.com,这是又一个服务器.只要在淘宝登录了,就能直接访问天猫(https://www.tmall.com)了,这就是单点登录了. 淘宝.天猫都是一家的公司,所以呢希望用户在访问淘宝时如果在淘宝上做了登录,当在访问或者从淘宝跳转到天猫时,直接就处于登录状态而不用再次登录,用户体验大大的好. 结合OAuth协议,相比就是如下的流程图,应用A就相当于淘宝,应…
OAuth协议是一个授权协议,目的是让用户在不将服务提供商的用户名密码交给第三方应用的条件下,让第三方应用可以有权限访问用户存在服务提供商上的资源. 接着上一篇说的,在第三方应用获取到用户资源后,如果过去的不是用户的自拍数据,而是用户的昵称头像等基本信息,根据这些基本信息,构建经过认证的Authentication对象,放进SecurityContext,这对于spring security来说,就算认证成功了.第三方应用引导用户走完这个流程,就是用户使用用户在服务提供商的上的用户基本信息登录了…
一.我的前言 这是看慕课网老师讲的SpringSecurity的学习笔记,老师讲的很好,开篇就说到了我的心里,老师说道: 有一定经验的程序员如何提升自己? 1,每天都很忙,但是感觉水平没有提升 2,不知道学什么,遇到复杂的业务场景时,又感觉技术储备不够 3,工作中写过很多代码,面试时候几句话就说完了.(说道了我心坎里!) 这背后的原因就是,知识点的深入程度不够. 自己不是很聪明,慢慢来,一步步学习一下! 这是一门讲应用安全方面的课程,安全涉及很多东西,最基础也是最重要的就是认证和授权.java业…
Spring security记住我基本原理: 登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeService,会生成一个token,将token写入到浏览器cookie,同时RememberMeService里边还有个TokenRepository,将token和用户信息写入到数据库中.这样当用户再次访问系统,访问某一个接口时,会经过一个RememberMeAuthenticationFilt…
Spring Security 的权限表达式 用法,在自定义的BrowserSecurityConfig extends WebSecurityConfigurerAdapter 配置文件里,每一个antMatchers匹配器后,使用权限表达式.(注意hasRole在UserDetailsService类里loadUserByUsername方法返回user的权限集合,需要加上前缀 ROLE_ 角色) 多个权限表达式写法…
token处理之二使用JWT替换默认的token JWT(Json Web Token) 特点: 1,自包含:jwt token包含有意义的信息 spring security oauth默认生成的token是uuid,是无意义的,本身并不包含任何信息.这个token所包含的信息,如果用redis存储token ,会在redis里存储这些信息(数据库也一样): 这样当用这个token去访问接口的时候,需要根据这个token 从redis中取出来存储的相关的信息,才能知道这个token所包含的信息…
token处理之一基本参数配置 处理token时间.存储策略,客户端配置等 以前的都是spring security oauth默认的token生成策略,token默认在org.springframework.security.oauth2.provider.token.DefaultTokenServices 类里生成的,感兴趣可以看看 /** * 认证服务器 * ClassName: ImoocAuthenticationServerConfig * @Description: TODO *…
登录成功后的处理AuthenticationSuccessHandler: 认证成功后,默认情况下spring security会继续访问之前访问的url,如果想自定义处理逻辑,用默认的就不行了.此时需要自定义登录成功后的处理,springsecurity提供了一个接口,AuthenticationSuccessHandler: 有三个参数,request,response,authentication(封装认证的信息,认证请求里的信息ip.session等) public interface…
阿里大鱼最新下载地址:阿里大鱼SDK下载 或者从官网进行下载:阿里大鱼SDK官网下载 下载完成后,将压缩包内的api_sdk文件夹放到ThinkPHP\Library\Vendor目录下,修改文件名为Aliyun,若修改为其他名称,请修改命名空间! 阿里大鱼申请步骤就不说了!开始接入吧~ 设置阿里大鱼配置信息: 在配置文件中配置: 'ALI_SMS' => [ 'PRODUCT' => 'Dysmsapi', 'DOMAIN' => 'dysmsapi.aliyuncs.com', 'R…
第1步:登录美圣短信控制台 http://www.rcscloud.cn/hy/HY_ZH/login 账号:******* 密码:******* http://www.rcscloud.cn/common/API 第2步:添加账号签名和短信模板 第3步:下载模板 第4步:在项目中新建项目GmkCollege.RCSCloud并将App_Code中的两个文件放到项目中,注意修改命名空间 第5步:前端 <tr class="margin-top"> <td class=…
项目前端页面实例 第1步:登录阿里大于控制台 https://www.alidayu.com/center/user/account?spm=0.0.0.0.P1K1jG 第2步:创建应用 第3步:配置短信签名 第4步:配置短信模板 第5步:前端 <tr class="margin-top"> <td class="padding-top text-center">手机号</td> <td><input type…
图一 基于SpringSocial实现qq登录,要走一个OAuth流程,拿到服务提供商qq返回的用户信息. 由上篇介绍的可知,用户信息被封装在了Connection里,所以最终要拿到Connection 1,Connection <---- ConnectionFactory:拿到一个Connection,就需要一个ConnectionFactory工厂 2,ConnectionFactory:需要ServiceProvider 服务提供商.ApiAdapter api适配器,在服务提供商和业务…
安全分为 认证和授权,前边讲的都是认证,现在说授权. 前端业务系统的权限简单些,一般只区分是否登录,复杂点的还会区分 VIP用户等简单的角色,权限规则基本不变. 后台系统比较复杂,角色众多,权限随着业务不断变化. 1,用代码控制简单的权限 直接在配置类 BrowserSecurityConfig   extends   WebSecurityConfigurerAdapter 的configure方法里 http //--------------授权相关的配置 -----------------…
上一篇说了用户认证的基本流程,但是上一篇当访问一个受保护的服务后,如果未认证会调到默认的登录页面,这样是不行的,而且认证成功后,就直接访问了那个服务,如果想要做认证成功后做一些操作,还需要自定义. 个性化用户认证流程: 1)自定义登录页面 2)自定义登录成功处理(如给用户发积分或者签到) 3)自定义登录失败处理(如记录密码失败次数,超过3次不让登录等) 1,自定义登录页面 在BrowserSecurityConfig类里配置: @Configuration //这是一个配置 public cla…
自定义用户认证逻辑: 1,处理用户信息获取,2,用户校验,3密码的加密解密 新建:MyUserDetailService类,实现UserDetailsService接口. UserDetailsService接口代码:只有一个方法,通过用户名获取用户信息,返回UserDetail public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFound…
一.引入 只要引入了spring-boot-starter-security,所有的服务都会被保护起来.启动项目,打开时所有的controller会被保护起来,随便访问一个,如http://localhost:8080/user就是这个效果,让我们输入用户名密码,默认的用户名是user,密码会在应用启动时在控制台打印:Using default security password: 1e520d65-b38b-4522-a340-fbe2612821fc 然后才能正常访问接口: 在applica…
SpringBoot默认的错误处理机制: 一.测试需要的部分代码 (完整代码放在了github https://github.com/lhy1234/spring-security): UserController:只对新增用户做测试,省略其他代码 @RestController @RequestMapping("/user") public class UserController { /** * 创建 * @Description: * //@RequestBody:json映射到…