token

Android SharedPreferences

前提是你 提交于 2020-02-08 05:25:26
在日常的开发工作中,经常需要将一些少量配置信息(机器或是设备)持久化的保存在本地。这时候使用数据库就会闲的很笨重,而且确实如此。 SharedPreferences 作为一个很轻量级存储类是比较好的选择 本篇就此简单SharedPreferences的应用。 SharedPreferences简介 SharedPreferences 是用来存储一些简单的配置文件的机制, SharedPreferences 使用 Map 数据结构来存储数据( key-value )。采用 XML 格式将数据存储到设备中。 <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="name">chenjy</string> <int name="age" value="18" /> </map> SharedPreferences使用 获取 SharedPreferences 有两种方式: 1.1 调用 Context 对象的 getSharedPreferences() 方法,可以被用一个应用程序下的其他组件共享。 2.2 调用 Activity 对象的 getPreferences() 方法,该对象只能在 Activity 中使用。 SharedPreferences 的四种操作模式: Context

前后端分离之JWT用户认证zf

一世执手 提交于 2020-02-08 04:07:08
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了。于是我们的程序就不知道谁是谁,就要再验证一次。所以为了保证系统安全,我们就需要验证用户否处于登录状态。 传统方式 前后端分离通过Restful API进行数据交互时,如何验证用户的登录信息及权限。在原来的项目中,使用的是最传统也是最简单的方式,前端登录,后端根据用户信息生成一个 token ,并保存这个 token 和对应的用户id到数据库或Session中,接着把 token 传给用户,存入浏览器 cookie,之后浏览器请求带上这个cookie,后端根据这个cookie值来查询用户,验证是否过期。 但这样做问题就很多,如果我们的页面出现了 XSS 漏洞,由于 cookie 可以被 JavaScript 读取,XSS 漏洞会导致用户 token 泄露,而作为后端识别用户的标识,cookie 的泄露意味着用户信息不再安全。尽管我们通过转义输出内容,使用 CDN 等可以尽量避免 XSS 注入,但谁也不能保证在大型的项目中不会出现这个问题。 在设置 cookie 的时候,其实你还可以设置 httpOnly 以及 secure 项。设置 httpOnly 后 cookie 将不能被 JS 读取

前后端分离之JWT用户认证

断了今生、忘了曾经 提交于 2020-02-08 03:32:52
在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了。于是我们的程序就不知道谁是谁,就要再验证一次。所以为了保证系统安全,我们就需要验证用户否处于登录状态。 传统方式 前后端分离通过Restful API进行数据交互时,如何验证用户的登录信息及权限。在原来的项目中,使用的是最传统也是最简单的方式,前端登录,后端根据用户信息生成一个 token ,并保存这个 token 和对应的用户id到数据库或Session中,接着把 token 传给用户,存入浏览器 cookie,之后浏览器请求带上这个cookie,后端根据这个cookie值来查询用户,验证是否过期。 但这样做问题就很多,如果我们的页面出现了 XSS 漏洞,由于 cookie 可以被 JavaScript 读取,XSS 漏洞会导致用户 token 泄露,而作为后端识别用户的标识,cookie 的泄露意味着用户信息不再安全。尽管我们通过转义输出内容,使用 CDN 等可以尽量避免 XSS 注入,但谁也不能保证在大型的项目中不会出现这个问题。 在设置 cookie 的时候,其实你还可以设置 httpOnly 以及 secure 项。设置 httpOnly 后 cookie 将不能被 JS 读取

认证和SSO(五)-基于token的SSO

喜欢而已 提交于 2020-02-08 03:03:09
1、修改项目使其基于浏览器cookie的SSO 1.1、修改回调方法,获得到token后,由存放到session改为存放到cookie /** * 回调方法 * 接收认证服务器发来的授权码,并换取令牌 * * @param code 授权码 * @param state 请求授权服务器时发送的state */ @GetMapping("/oauth/callback") public void oauthCallback(@RequestParam String code, String state, HttpServletRequest request, HttpServletResponse response) throws IOException { String oauthTokenUrl = "http://gateway.caofanqi.cn:9010/token/oauth/token"; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); headers.setBasicAuth("webApp", "123456"); MultiValueMap<String, String> params = new

c++中宏的标记连接操作(##)

大兔子大兔子 提交于 2020-02-08 01:23:17
//by 鸟哥 qq1833183060 -- //参考https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2012/09dwwt6y(v=vs.110) // preprocessor_token_pasting.cpp # include <stdio.h> # define paster( n ) printf( "token" #n " = %d", token##n ) int token9 = 9 ; int main ( ) { paster ( 9 ) ; } //输出为:token9 = 9 // 其中宏 paster(9) 展开过程为 1、 printf_s( “token” #9 " = %d", token##9 ); 2、 printf( “token” “9” " = %d", token9 ); 它等价于 printf( “token9 = %d”, token9 ); 来源: CSDN 作者: 鸟哥01 链接: https://blog.csdn.net/sinat_18811413/article/details/104214945

105.Token Interceptor【表单的重复提交】

半腔热情 提交于 2020-02-07 19:00:39
步骤: 1. 定义一个 JSP 页面 2. 定义一个 struts_token.xml 配置文件 3. 配置 struts.xml (1) 在 JSP 页面中增加一个隐藏域 < s:token ></ s:token > (2)第二步其实就是配置拦截器,可以在现有的xml文件中配置 (3) 其实就是把第二步中的 xml 加入到 struts.xml 中去 注意蓝色部分 经过以上配置后,再次重复提交表单就会报出相应的信息。 提示为英文提示,我们如果需要中文提示,可以在该 namespace 下面建立一个 token.properties 资源文件,名字必须为这个名字。其实就是用它来覆盖底层 struts-messages.properties 中的英文提示。 设置完成后还需要在 struts.xml 中进行资源文件配置即可。如下图 来源: CSDN 作者: 爱妮三千遍 链接: https://blog.csdn.net/ketouch/article/details/104198845

微信公众号开发之网页授权登录及code been used 解决!

眉间皱痕 提交于 2020-02-07 03:21:30
首先微信公众号开发网页授权登录使用环境: 开发工具:eclipse;服务器:tomcat8,开发语言:JAVA。 我写的网页授权登录时用开发者模式自定义view类型按钮点击跳转链接的。 微信网页授权登录首先以官方微信开发文档为准,大体共分为4步: 先说第一步获取code: code说明: code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5扽这未被使用自动过期。 微信公众开发文档给的有获取code的链接, 建议直接复制来用 ,然后替换其中相应的参数即可。 链接为: https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 其中参数说明: 这官网上都有,这里展示是想说明一下scope参数,请注意看官网上给出的demo: 请注意微信授权登录scope两种redirect_url后面跟的链接使用的协议。 这个协议使用不当可能会在项目部署到服务器上测试时在安卓和ios上出现问题。 至此, 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的

[转载]k8s dashboard认证及分级授权

不羁的心 提交于 2020-02-07 02:43:17
k8s dashboard认证及分级授权 Dashboard官方地址: https://github.com/kubernetes/dashboard dashbord是作为一个pod来运行,需要serviceaccount账号来登录。 先给dashboad创建一个专用的认证信息。 先建立私钥: 1 2 3 4 5 [root@master ~]# cd /etc/kubernetes/pki/ [root@master pki]# (umask 077 ; openssl genrsa -out dashboard.key 2048 ) Generating RSA private key, 2048 bit long modulus .............................................................................................................................+++ .................................+++ 建立一个证书签署请求: 1 [root@master pki]# openssl req -new -key dashboard.key -out dashboard.csr -subj "/O=zhixin/CN

跨域和表单重复

会有一股神秘感。 提交于 2020-02-06 17:39:58
一、跨域问题    1、方案一:HTTP请求头     AServlet import com.alibaba.fastjson.JSON; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/aServlet") public class AServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } //方法一:使用请求头解决跨域问题 @Override protected void doGet(HttpServletRequest req,

用rust写一个玩具解释器3

我们两清 提交于 2020-02-06 12:49:42
项目目录 项目地址 画质有点渣 其实不应该创建太多的包,因为里面其实只有一个有效文件(mod.rs和test.rs算是辅助) . 所以说目录可以更简单一些. token 在上文中提到了把token看为字符串, 而其大致分为两种. 我们预先定义的 比如 +,-,*,/,if,return,fn和let等 留给用户的 比如: 变量名,整数 //token/token.rs //不想下载第三方包, 所以这样子是一个可接受的选择 use std : : collections : : HashMap ; pub fn lookup_ident ( ident : & String ) -> TokenType { let mmap : HashMap < String , TokenType > = { let mut map = HashMap : : new ( ) ; map . insert ( "fn" . to_string ( ) , FUNCTION ) ; map . insert ( "let" . to_string ( ) , LET ) ; map . insert ( "true" . to_string ( ) , TRUE ) ; map . insert ( "false" . to_string ( ) , FALSE ) ; map . insert