token

生成比较短的Token字符串

好久不见. 提交于 2020-03-11 02:09:56
有的时候,我们需要生成一些Token作为标识:如认证后的标识符,资源的提取码等。一个比较常见的算法是生成一个GUID来作为Token,由于GUID的随机性和唯一性特点,作为Token是一个非常可靠的选择。 GUID是一个128bit的数组,为了方便携带,往往需要把它表述为字符串的形式。一般把它表述为如下形式: {79FAF822-7194-4FE3-8C4F-1D99BE71BC9C} 。这样有一个弊病:太长了,那么我们如何把它弄短点呢? 去掉不必要的修饰符, 首先可以通过去掉无意义的括号和减号来较少长度: var token = guid.ToString( "N" ); 这样字符串就成为: 79faf82271944fe38c4f1d99be71bc9c 。感觉还是蛮长的。 使用Base64编码来表示 前面的表示方法中,是使用的16机制来表示的,如果使用Base64编码的话,则可以进一步压缩字符串 var token = Convert .ToBase64String(guid.ToByteArray()).TrimEnd( '=' ); 这样字符串就成为: Ivj6eZRx40+MTx2ZvnG8nA 。看起来稍微好一点了。 换一种Token生成方式 在使用Base64方式的编码后,Token字符串还是有20多位,有的时候还是嫌它长了。由于GUID本身就有128bit

基于spring自动注入及AOP的表单二次提交验证

£可爱£侵袭症+ 提交于 2020-03-10 23:24:50
这几天在网上闲逛,看到了几个关于spring的token二次提交问题,受到不少启发,于是自己动手根据自己公司的项目框架结构,制作了一个基于spring自动注入加上AOP的表单二次提交。 原理:建立两个注解类,一个进行token的设置,一个进行token的验证。在一个Aspect中,对这两个注解进行捕获并进行相应的验证。 废话不多说,下面是代码: Token注解类,标记需要设置token的方法。 @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) //设定此注解对应的是方法。 public @interface Token { } TokenValid注解类,标记需要验证token的方法。 @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface TokenValid { } TokenAspect类,对上面两个注解标识的方法的访问进行捕获并处理。 @Aspect @Component public class TokenAspect { @Around("@annotation(token)") //可以直接捕获下面这个方法中参数所设定的注解类型

token和session的区别

你说的曾经没有我的故事 提交于 2020-03-10 21:08:41
 session和token都是用来保持会话,功能相同 一、 session机制,原理 session是 服务端 存储的一个对象,主要用来存储所有访问过该服务端的客户端的用户信息(也可以存储其他信息),从而实现 保持用户会话状态 。但是服务器重启时,内存会被销毁,存储的用户信息也就消失了。不同的用户访问服务端的时候会在session对象中存储键值对,“键”用来存储开启这个用户信息的“钥匙”,在登录成功后,“钥匙” 通过cookie返回给客户端 , 客户端存储为sessionId记录在cookie中 。当客户端再次访问时,会 默认携带cookie中的sessionId 来实现会话机制。 session是基于cookie的。 cookie的数据4k左右 cookie存储数据的格式:字符串key=value cookie存储有效期:可以自行通过expires进行具体的日期设置,如果没设置,默认是关闭浏览器时失效。 cookie有效范围:当前域名下有效。所以 session这种会话存储方式方式只适用于客户端代码和服务端代码运行在同一台服务器上 (前后端项目协议、域名、端口号都一致,即在一个项目下) session持久化 用于解决重启服务器后session就消失的问题。在数据库中存储session,而不是存储在内存中。通过包: express-mysql-session 其它

js获取链接中的参数

泪湿孤枕 提交于 2020-03-10 13:08:33
js获取链接中的参数 < script > function GetRequest2 ( key ) { var url = location . search ; var theRequest = new Object ( ) ; if ( url . indexOf ( "?" ) != - 1 ) { var str = url . substr ( 1 ) ; strs = str . split ( "&" ) ; for ( var i = 0 ; i < strs . length ; i ++ ) { theRequest [ strs [ i ] . split ( "=" ) [ 0 ] ] = unescape ( strs [ i ] . split ( "=" ) [ 1 ] ) ; } } var value = theRequest [ key ] ; return value ; } 例如链接为:http : / / www . xxxx ? uid = 22 & token = 1231321542132 var uid = GetRequest2 ( "uid" ) var token = GetRequest2 ( "token" ) < / script > 来源: CSDN 作者: 站在巨人肩膀上的小菜鸟 链接: https://blog

消息推送之APNS

左心房为你撑大大i 提交于 2020-03-10 11:37:24
消息推送之APNS 利用APNS进行消息推送 原理 APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。 APNS推送可以分为三个阶段: 第一阶段:推送服务器应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。 第二阶段:APNS在自身的已注册推送服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。 第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出推送通知。 详细流程如下: 1、首先是应用程序注册消息推送服务。 2、APNS向应用程序返回deviceToken。 3、应用程序将deviceToken发送给推送服务端程序。 4、服务端程序向APNS服务发送消息。 5、APNS服务将消息发送给iPhone应用程序。 证书生成 网上有很多关于证书生成的详细步骤,这里不再说明了。 最终生成的证书共包含下面四个 1、pushNotification.certSigningRequest 2、aps_development.cer(下载生成的支持推送服务的证书。) 3、pushNotificationDevprofile.mobileprovision 4、pushNotification.p12 下面直接上代码。 客户端 1、应用程序注册消息推送服务

(27)ASP.NET Core .NET标准REST库Refit

核能气质少年 提交于 2020-03-10 09:46:22
1.简介 Refit 是一个受到Square的Retrofit库(Java)启发的自动类型安全REST库。通过HttpClient网络请求(POST,GET,PUT,DELETE等封装)把REST API返回的数据转化为 POCO(Plain Ordinary C# Object,简单C#对象) to JSON。我们的应用程序通过Refit请求网络,实际上是使用Refit接口层封装请求参数、Header、Url等信息,之后由HttpClient完成后续的请求操作,在服务端返回数据之后,HttpClient将原始的结果交给Refit,后者根据用户的需求对结果进行解析的过程。安装组件命令行: Install-Package refit 代码例子: [Headers("User-Agent: Refit Integration Tests")]//这里因为目标源是GitHubApi,所以一定要加入这个静态请求标头信息,让其这是一个测试请求,不然会返回数据异常。 public interface IGitHubApi { [Get("/users/{user}")] Task<User> GetUser(string user); } public class GitHubApi { public async Task<User> GetUser() { var gitHubApi =

面试题、一

*爱你&永不变心* 提交于 2020-03-09 18:45:52
1.描述下数据库中的事务--ACID各个的特点 原子性(Atomicity):事务中的操作要么全部成功要么全部失败。 一致性(Consistency):事务前后数据的完整性必须保持一致。 隔离性(Isolation):多个并发的事务之间是相互隔离的,互不干扰的。 持久性(Durability):事务提交后,数据是永久改变的。 2.什么是springboot?你们公司是用的哪个版本? SpringBoot是Spring推出用于解决传统框架配置文件冗余,装配组件操作繁杂并基于Maven的解决方案,主要目的是能够快速搭建单个微服务。 Spring boot 的优点 轻松创建独立的Spring应用程序 内联Tomcat、jetty等web容器,不需要部署WAR文件。 提供一系列的“starter”来简化的Maven配置 开箱即用,尽可能自动配置Spring 版本号:2.1.6 3.什么是redis? Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis优势 性能极高-Redis能读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型-Redis支持二进制案列的String,Lists,Hashes,Sets及Ordered Sets 数据类型操作。 原子—Redis的所有操作都是原子性(不可再分)的

SpringCloud学习笔记(19)----Spring Cloud Netflix之服务网关Zuul自定义过滤器

我的未来我决定 提交于 2020-03-09 16:52:21
  zuul不仅只是路由,还可以自定义过滤器来实现服务验证。   实现案例:自定义过滤器,检验头部是否带有token,如果token=wangx,则通过校验,若不存在或不为wangx则返回提示token错误。   扩展:一般情况下,可以采用JWT规范来做token的校验。   JWT:https://jwt.io/ 1. 自定义过滤器 package com.wangx.cloud.springcloud04zuul.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class MyFilter extends ZuulFilter { @Override public String filterType() { return "pre"; }

Spring Cloud Gateway 实现Token校验

廉价感情. 提交于 2020-03-09 13:30:41
在我看来,在某些场景下,网关就像是一个公共方法,把项目中的都要用到的一些功能提出来,抽象成一个服务。比如,我们可以在业务网关上做日志收集、Token校验等等,当然这么理解很狭隘,因为网关的能力远不止如此,但是不妨碍我们更好地理解它。下面的例子演示了,如何在网关校验Token,并提取用户信息放到Header中传给下游业务系统。 1. 生成Token 用户登录成功以后,生成token,此后的所有请求都带着token。网关负责校验token,并将用户信息放入请求Header,以便下游系统可以方便的获取用户信息。 为了方便演示,本例中涉及三个工程 公共项目:cjs-commons-jwt 认证服务:cjs-auth-service 网关服务:cjs-gateway-example 1.1. Token生成与校验工具类 因为生成token在认证服务中,token校验在网关服务中,因此,我把这一部分写在了公共项目cjs-commons-jwt中 pom.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi

k8s部署dashboard

跟風遠走 提交于 2020-03-08 22:22:26
k8s的web UI网页管理工具kubernetes-dashboard可提供部署应用,资源对象管理,容器日志查询,系统监控等常用的集群管理功能,如果想在页面上显示系统资源的使用情况,要求部署Metrics-server(这里没有部署) 第一步: 可以通过kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml进行部署 [root@master ~]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml namespace/kubernetes-dashboard created serviceaccount/kubernetes-dashboard created service/kubernetes-dashboard created secret/kubernetes-dashboard-certs created secret/kubernetes-dashboard-csrf created secret/kubernetes