token

Grab x number of words before and after a given keyword?

北慕城南 提交于 2020-02-02 03:18:08
问题 How can I go about grabbing [x] number of words before and after a given keyword in a string in PHP? I am trying to tokenize results from a mysql query tailored to the keyword as a snippet. 回答1: $string = 'This is a test string to see how to grab words from an arbitrary sentence. It\'s a little hacky (as you can see from the results) - but generally speaking, it works.'; echo $string,'<br />'; function getWords($string,$word,$before=0,$after=0) { $stringWords = str_word_count($string,1);

基于Spring AOP实现的权限控制

杀马特。学长 韩版系。学妹 提交于 2020-02-01 08:45:28
1.AOP简介 AOP,面向切面编程,往往被定义为促使软件系统实现关注点的分离的技术。系统是由许多不同的组件所组成的,每一个组件负责一块特定的功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件 下面介绍一下AOP相关的术语: 通知 : 通知定义了切面是什么以及何时使用的概念。Spring 切面可以应用5种类型的通知: 前置通知(Before):在目标方法被调用之前调用通知功能。 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么。 返回通知(After-returning):在目标方法成功执行之后调用通知。 异常通知(After-throwing):在目标方法抛出异常后调用通知。 环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。 连接点 :是在应用执行过程中能够插入切面的一个点。 切点 : 切点定义了切面在何处要织入的一个或者多个连接点。 切面 :是通知和切点的结合。通知和切点共同定义了切面的全部内容。 引入 :引入允许我们向现有类添加新方法或属性。 织入 :是把切面应用到目标对象,并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中

Maven下的JWT配置

僤鯓⒐⒋嵵緔 提交于 2020-01-31 15:14:07
SSM下的JWT配置 1.简介 随着互联网的不断发展,技术的迭代也非常之快。我们的用户认证也从刚开始的用户名密码转变到基于cookie的session认证,然而到了今天,这种认证已经不能满足与我们的业务需求了(分布式,微服务)。我们采用了另外一种认证方式:基于token的认证。 一、与cookie相比较的优势: 1、支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的; 2、无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而session需要在服务端存储,一般是通过cookie中的sessionID在服务端查找对应的session; 3、无需绑定到一个特殊的身份验证方案(传统的用户名密码登陆),只需要生成的token是符合我们预期设定的即可; 4、更适用于移动端(Android,iOS,小程序等等),像这种原生平台不支持cookie,比如说微信小程序,每一次请求都是一次会话,当然我们可以每次去手动为他添加cookie,详情请查看博主另一篇博客; 5、避免CSRF跨站伪造攻击,还是因为不依赖cookie; 6、非常适用于RESTful API,这样可以轻易与各种后端(java,.net,python…)相结合,去耦合 JWT:JSON Web Token,其实token就是一段字符串,由三部分组成:Header,Payload

egg-jwt egg jwt 使用

老子叫甜甜 提交于 2020-01-31 12:00:47
1,安装egg-jwt npm install egg-jwt --save 2,配置 config/plugin.ts import { EggPlugin } from 'egg'; const plugin: EggPlugin = { jwt: { enable: true, package: "egg-jwt" }, }; export default plugin; config/config.default.ts config.jwt = { secret: "ylw"//自定义 token 的加密条件字符串 }; 如果使用了ts,需要在根目录下的 typings/index.d.ts 文件里声明一个 any 类型,否则会类型错误: import 'egg'; declare module 'egg' { interface Application { jwt: any; mysql:any; } } 3,使用 在controller中使用: login.ts const token = ctx.app.jwt.sign({ ...ctx.request.body, }, this.app.config.jwt.secret, { expiresIn: '60m', // 时间根据自己定,具体可参考jsonwebtoken插件官方说明 });

微信公众号获取用户地理位置

五迷三道 提交于 2020-01-31 10:37:20
很久没搞微信的js-sdk了, 搞了一下午, 刷新页面老是失败, 没想到结合经验给大家展示下获取用户地理位置 第一步:登录微信公众号https://mp.weixin.qq.com 首先先设置最基本的配置(这一步大家应该都会) 第二步:点击公众平台右上角展开点击功能设置 配置网页授权域名 填写项目所使用的的域名并将文件下载放到项目根目录 然后在配置js安全域名同样将要下载的txt文件放到项目目录也可以是二级目录, 如果放到二级目录域名后面要就目录路径哦 保存之后: 第三步: 公众号左边栏,开发->子栏目:接口权限 开启用户获取地理位置 第四步:先在php服务端配置好js-sdk所需要的参数:appId, timestamp , noceStr, signature , jsApiList function getSignPackage($appId,$appSecret) { $jsapiTicket = getJsApiTicket($appId,$appSecret); // 注意 URL 一定要动态获取,不能 hardcode. $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http

jumpserver2

我与影子孤独终老i 提交于 2020-01-30 15:43:40
测试环境 CPU: 64位双核处理器 内存: 4G DDR3 数据库:mysql 版本大于等于 5.6 mariadb 版本大于等于 5.5.6 环境 系统: CentOS 7 IP: 192.168.244.144 设置 selinux 和防火墙 $ firewall-cmd --zone=public --add-port=80/tcp --permanent # nginx 端口 $ firewall-cmd --zone=public --add-port=2222/tcp --permanent # 用户SSH登录端口 coco $ firewall-cmd --reload # 重新载入规则 $ setenforce 0 $ sed -i "s/enforcing/disabled/g" /etc/selinux/config # 修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文 $ localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 $ export LC_ALL=zh_CN.UTF-8 $ echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf 一、准备python3和python虚拟环境 1.1 安装依赖包 $ yum -y install wget gcc

idea设置github连接

微笑、不失礼 提交于 2020-01-30 15:26:58
文章目录 用户密码方式 个人令牌方式 首先默认你是配置好了 git 的,然后希望把项目通过idea上传到github中,你就需要配置好 github 的连接 用户密码方式 【File】→【Settings】→搜索 GitHub 关键字→然后输入用户密码来测试 github 连接 个人令牌方式 建议采用个人令牌方式 【File】→【Settings】→搜索 GitHub 关键字→Auth Type 选择 token 下面的 Token 处你可以点击右侧 Create API Token 输入用户名和密码生成,或者你直接去 GitHub 中去取,通过如下过程 GitHub 中取 进入你的 GitHub 中→右上角 【Settings】→左边一栏找到【Developer settings】→左边一栏找到【Personal access token】→右边点击【Generate new token】→全选所有→将产生的 token 号复制到 idea 中 Token 中→点击 Test 测试连接 来源: CSDN 作者: abcnull 链接: https://blog.csdn.net/abcnull/article/details/104113988

畅购09:了解一下关于session和token以及常用的解决方案

三世轮回 提交于 2020-01-30 12:51:38
有关商品那部分实在是太无聊,照着视频做完全没有任何问题,所以我就不记录了。在后面有关微服务网关、JWT和OAuth2.0的学习过程中可以说是很一头雾水。 我花了大概两天时间把畅购这一块捋清楚后,基于畅购设计一套自己的微服务,在学习畅购的时候,由于JWT令牌自身特性导致令牌一旦发放则无法撤销,也就是说,我们没办法像之前那样将用户强制下线,即使用户点击注销,该令牌也会持续生效直到过期。 所以我在设计这套微服务的时候,将用户信息存到了Redis中,以token为key,实现了记录用户状态的功能,但是在后来学习相关资料的时候,发现这样其实破坏了JWT无状态的原则,如果要保证用户状态的话,还不如使用session管理用户。那么怎样才能比较友好的选择一个合适的方法保证API的安全性呢? 在这之前,我们先了解一下session和token。 1、什么是session和token 相信各位在学习JavaWeb的时候一定做过用户登录和注销的功能,我们知道,HTTP是无状态协议,它没办法告诉你这个请求是张三发给你的,为了解决这个问题,session和cookie就出现了。 session原理 浏览器第一次访问服务器,服务器会创建一个session,然后同时为该session生成一个唯一的会话的key,也就是sessionid,然后

Logout if token is expired

99封情书 提交于 2020-01-30 08:19:30
问题 I'm working on a react application that consists of many API requests. The structure of the application is When logging in, I'm receiving a token on response and I'm saving the token in my local storage to be used in other API requests. This token is expired every 30 minutes and if I do an API request after 30 minutes, I'm receiving a status of 401 in my request. I'm using this 401 status to do my logging out and clearing token data in local storage. Example request export function

Flask之WTForms

萝らか妹 提交于 2020-01-30 05:38:13
Flask之WTForms 简介 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。 安装: 1 pip3 install wtforms 用户登录注册示例 1. 用户登录 当用户登录时候,需要对用户提交的用户名和密码进行多种格式校验。如: 用户不能为空;用户长度必须大于6; 密码不能为空;密码长度必须大于12;密码必须包含 字母、数字、特殊字符等(自定义正则); app.py #!/usr/bin/env python # -*- coding:utf-8 -*- from flask import Flask, render_template, request, redirect from wtforms import Form from wtforms.fields import core from wtforms.fields import html5 from wtforms.fields import simple from wtforms import validators from wtforms import widgets app = Flask(__name__, template_folder='templates') app.debug = True class LoginForm(Form): name =