token

token防止表单重复提交

大兔子大兔子 提交于 2019-12-18 22:54:22
出现表单重复提交的三种情况: 一、服务器响应缓慢,用户多次点击提交按钮。 二、提交成功后刷新页面。 三、提交成功后返回表单页面再次点击提交。 package com.jalja.token; import java.io.IOException; import java.io.PrintWriter; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class UserServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request,

Shiro 身份验证

梦想与她 提交于 2019-12-18 21:44:04
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 身份验证 ,即在应用中谁能证明他就是他本人。一般提供如他们的身份 ID 一些标识信息来表明他就是他本人,如提供身份证,用户名 / 密码来证明。 在 shiro 中,用户需要提供 principals (身份)和 credentials (证明) 给 shiro ,从而应用能验证用户身份: principals :身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。一个主体可以有多个 principals ,但只有一个 Primary principals ,一般是用户名 / 密码 / 手机号。 credentials :证明 / 凭证,即只有主体知道的安全值,如密码 / 数字证书等。 最常见的 principals 和 credentials 组合就是用户名 / 密码了。接下来先进行一个基本的身份认证。 另外两个相关的概念是之前提到的 Subject 及 Realm ,分别是主体及验证主体的数据源。 2.2 环境准备 本文使用Maven构建,因此需要一点Maven知识。首先准备环境依赖: Java代码 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version> 4.9

session和token区别

痴心易碎 提交于 2019-12-18 18:37:43
分布式系统认证/授权 目前分布式系统存在两种常用的认证授权方式: 分布式session和token 1.session的概念 session中存放登录用户的个人信息,创建session时,随机生成一个session_id和其绑定,session_id会随cookie下发到客户端 session_id --- 服务器根据session_id查找session cookies --- 存放session_id,客户端请求时,浏览器自动带上cookies中的session_id 2.分布式session的概念 用户登录后返回session_id() 后续用户请求时,服务器根据这个session_id到一个集中存储session的地方来查询session(可以做成session微服务) 这样应用服务器上不用存储session,也能达到应用服务器无状态(状态转移到某个集中存储session的系统了) 3.token的概念 通常意义的token是把session中的内容都放到token中(可以明文形式或者用对称加密算法加密(加密密钥放在服务器端)), 再把这些内容做hash签名(密钥在服务器),把内容和其签名拼接成一个字符串(这个就是token) 发送给客户端, 客户端后续请求都带上这个token,服务器首先校验token是否被篡改(根据hash签名校验),如果没被篡改而且token 也没过期

词法分析

丶灬走出姿态 提交于 2019-12-18 16:40:30
词法分析器 定义: 词法分析器的功能输入源程序,按照构词规则分解成一系列单词符号。单词是语言中具有独立意义的最小单位,包括关键字、标识符、运算符、界符和常量等 (1) 关键字 是由程序语言定义的具有固定意义的标识符。例如,Pascal 中的begin,end,if,while都是保留字。这些字通常不用作一般标识符。 (2) 标识符 用来表示各种名字,如变量名,数组名,过程名等等。 (3) 常数 常数的类型一般有整型、实型、布尔型、文字型等。 (4) 运算符 如+、-、*、/等等。 (5) 界符 如逗号、分号、括号、等等。 输出: 词法分析器所输出单词符号常常表示成如下的二元式: (单词种别,单词符号的属性值) 单词种别通常用整数编码。标识符一般统归为一种。常数则宜按类型(整、实、布尔等)分种。关键字可将其全体视为一种。运算符可采用一符一种的方法。界符一般用一符一种的方法。对于每个单词符号,除了给出了种别编码之外,还应给出有关单词符号的属性信息。单词符号的属性是指单词符号的特性或特征。 示例: 比如如下的代码段: while(i>=j) i-- 经词法分析器处理后,它将被转为如下的单词符号序列: <while, _> <(, _> <id, 指向i的符号表项的指针> <>=, _> <id, 指向j的符号表项的指针> <), _> <id, 指向i的符号表项的指针> <--, _>

从hello world 说程序运行机制

我们两清 提交于 2019-12-18 15:41:00
转自: http://www.cnblogs.com/yanlingyin/archive/2012/03/05/2379199.html 开篇 编译,简单的说,就是把源程序转换为可执行程序。 从hello world 说程序运行机制 里面简单的说明了程序运行的过程,以及一个程序是如何一步步变成可执行文件的。在这个过程中,编译器做了很多重要的工作。对底层该兴趣的我,自然的,也就迫切想搞清楚编译的内部实现,也就是编译的原理。 这篇文章主要说的是编译器前端,词法分析器的原理,最后会给出一个词法分析器的简单实现。 介绍 编译简单的说,就是把源程序转化为另一种形式的程序,而其中关键的部分就是理解源程序所要表达的意思,才能转化为另一种源程序。 可以用一个比喻来说明问题:人A和人B想要交谈,但是他们都不知道彼此的语言,这就需要一个翻译C,同时懂得A和B的语言。有了C做中间层,A和B才能正常交流。C的作用就有点像编译器,它必须能理解源程序所要表达的意思,才能把信息传递给另一个。 编译器也一样,它的输入是语言的源文件(一般可以是文本文件)对于输入的文件,首先要分离出这个输入文件的每个元素(关键字、变量、符号、、) 然后根据语言的文法,分析这些元素的组合是否合法,以及这些组合所表达的意思。 程序设计语言和自然语言不一样,都是用符号来描述,每个特定的符号表示特定的意思,而且程序设计语言是上下文无关的

【百度大脑新品体验】行驶证识别

情到浓时终转凉″ 提交于 2019-12-18 14:53:18
【百度大脑新品体验】行驶证识别 作者:才能我浪费99 1.功能描述: 对机动车行驶证主页及副页所有21个字段进行结构化识别,包括号牌号码、车辆类型、所有人、品牌型号、车辆识别代码、发动机号码、核定载人数、质量、检验记录等。可应用于网约车或货车司机身份审查等场景,有效提升信息录入效率,降低用户输入成本,提升用户使用体验。 2.平台接入 具体接入方式比较简单,可以参考我的另一个帖子,这里就不重复了: http://ai.baidu.com/forum/topic/show/943327 3.调用攻略(Python3)及评测 3.1首先认证授权: 在开始调用任何API之前需要先进行认证授权,具体的说明请参考: http://ai.baidu.com/docs#/Auth/top 具体Python3代码如下: - - coding: utf-8 - - #!/usr/bin/env python import urllib import base64 import json #client_id 为官网获取的AK, client_secret 为官网获取的SK client_id =【百度云应用的AK】 client_secret =【百度云应用的SK】 #获取token def get_token(): host = ‘https://aip.baidubce.com/oauth/2.0

使用session防止重复提交

亡梦爱人 提交于 2019-12-18 13:28:38
一、表单重复提交的常见应用场景 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML> <html> <head> <title>Form表单</title> </head> <body> <form action="${pageContext.request.contextPath}/servlet/DoFormServlet" method="post"> 用户名:<input type="text" name="username"> <input type="submit" value="提交" id="submit"> </form> </body> </html> form表单提交到DoFormServlet进行处理 package xdp.gacl.session; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

Codeigniter CSRF token problem

徘徊边缘 提交于 2019-12-18 13:23:07
问题 I've made a simple signup/newsletter site, but I've got a weird problem. Some people get a error that says An Error Was Encountered The action you have requested is not allowed. I've already tried google and found that people had the same problem when CSRF was set to true. However, i doesn't happens to everyone, just a small group of people. I'm using form_open and form_close and i can see the hidden field (token). I'm using the latest version of Codeigniter 2.0.2 This is my controller

Splitting strings in C++ [duplicate]

北战南征 提交于 2019-12-18 13:18:11
问题 This question already has answers here : How do I iterate over the words of a string? (76 answers) Closed last year . How do you split a string into tokens in C++? 回答1: this works nicely for me :), it puts the results in elems . delim can be any char . std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) { std::stringstream ss(s); std::string item; while(std::getline(ss, item, delim)) { elems.push_back(item); } return elems; } 回答2: With this Mingw

vue+ axios+token 封装axios 封装接口url,带token请求,token失效刷新

浪尽此生 提交于 2019-12-18 12:30:42
一、封装axios import axios from 'axios' import qs from "qs" const TIME_OUT_MS = 60 * 1000 // 默认请求超时时间 //axios.defaults.baseURL = 'http://localhost:8080'; // http request 拦截器 axios.interceptors.request.use( config => { if ($cookies.get("access_token")) { // 判断是否存在token,如果存在的话,则每个http header都加上token config.headers.Authorization ='Bearer '+ $cookies.get("access_token"); } return config; }, err => { return Promise.reject(err); }); // http response 拦截器 axios.interceptors.response.use( response => { return response; }, error => { console.log("response error :"+error); if (error.response) { switch (error