自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (4)
  • 收藏
  • 关注

原创 9_springboot_shiro_jwt_多端认证鉴权_整合jwt

本节是整个系列的最终一篇文章。本节中回顾了Shiro框架的流程,使得我们对Shiro的定制化开发更加游刃有余。首先详细的介绍了什么是jwt,我们在shiro中使用 jwt的必要性。然后通过代码完成了整合。本章还对 `SessionStorageEvaluator` 做了扩展,因为JWT不再需要使用session,而同一个项目中其它认证方式可能还需要session,这就需要根据情况来决定是否创建session。处理方式是在过滤器的预处理方法中,向reqeust中提前放入`SESSION_CREATIO

2024-04-06 15:11:57 967

原创 8_springboot_shiro_jwt_多端认证鉴权_多Reaml管理

前面一直讨论的是只有一个Reaml的场景,Shiro是可以管理多个Realm的。那么什么场景下,我们需要定义多个Realm,以及Shiro框架是如何管理多个Realm的,他们是如何工作的。本章将会解释上面的问题,最后会配置前面章节中的 `SystemAccountRealm` 用来做用户名,密码认证, `ApiAuthenticationRealm` 用来做 api接口访问认证。

2024-04-01 17:09:57 860

原创 7_springboot_shiro_jwt_多端认证鉴权_自定义AuthenticationToken

本小节会先对Shiro的核心流程进行一次回顾,并进行梳理。然后会介绍如果应用是以API接口的方式提供给它方进行调用,那么在这种情况下如何使用Shiro框架来完成接口调用的认证和授权。

2024-03-31 15:04:01 1009

原创 6_springboot_shiro_jwt_多端认证鉴权_过滤器链

ShiroFilterFactoryBean是什么,它如何工作。Shiro中如何管理过滤器链,配置自定义过滤器并加入过滤器链

2024-03-29 19:51:07 733

原创 5_springboot_shiro_jwt_多端认证鉴权_禁用Cookie

cookie是什么,Shiro中在服务端怎么禁用,禁用后通过在将sessionID放入到自定义的请求头中实现会话保持,自定义SessionManager实现

2024-03-16 15:03:22 1065

原创 4_springboot_shiro_jwt_多端认证鉴权_Redis存储会话

理解什么是会话,Shiro如何做会话管理,分布式集群环境下需要将会话存放到Redis中,需要自己定义SessionDAO,同时要替换掉默认的ServletContainerSessionManager

2024-03-14 19:46:17 915

原创 3_springboot_shiro_jwt_多端认证鉴权_Redis缓存管理器

本章介绍什么是Shiro的缓存管理器,作用是什么,自定义Redis Shiro缓存管理器。缓存什么时候被创建,缓存的内容是什么,什么时候过期

2024-03-13 14:10:51 777

原创 2_springboot_shiro_jwt_多端认证鉴权_Realm与匹配器

Realm 源码分析,自定义Realm,自定义匹配器,鉴权异常处理

2024-03-12 17:15:14 968 1

原创 1_springboot_shiro_jwt_多端认证鉴权_Shiro入门

Shiro核心概念,分析Shiro Filter源码自定义, FormAuthenticationFilter,页面重定向改为输出JSON信息

2024-03-12 17:04:26 854

原创 0_springboot_shiro_jwt_多端认证鉴权_前言

使用springboot+shiro+jwt 实现多端认证,Shiro从入门到定制改造

2024-03-12 16:49:53 463

原创 SpringCache Redis Key设置过期时间

SpringCache Redis Key设置过期时间1. Spring CacheSpring Cache 是Spring 提供的一整套的缓存解决方案,它不是具体的缓存实现,它只提供一整套的接口和代码规范、配置、注解等,用于整合各种缓存方案。先理解抽象层的几个概念:1.1 Cache 缓存的抽象Cache 缓存的抽象,Spring定义为一个接口。一个缓存对象中可以存储多个Entry<key,value>, 几个重要方法:getName() 每个缓存都有名称,通过这个方法可

2022-05-16 16:40:46 6000 1

原创 QT集成CEF13-实现JavaScript窗口间通信

本节利用CEF的进程间通信机制,实现在两个Renderer进程间,使用JavaScript进行通信。即实现两个窗口: MasterWindow 和 SlaverWindow,MasterWindow 使用JavaScript发送消息,SalverWindow监听处理消息。其实现思路为:Browser进程中创建两个窗口,MasterWindow,加载本地 index.html, SlaverWindow加载本地 slaver.html,并保存两个窗口对应的browser对象在 Browser进程的内存中

2021-12-27 18:36:38 1444 3

原创 QT集成CEF12-JavaScript监听文件夹与文件变化

QT集成CEF12-JavaScript监听文件夹与文件变化本节要实现的目标是: 监听本地磁盘文件变化:文件夹中新增文件文件夹中的文件被删除文件内容改变一旦发生这些变化,这些变化将作为“事件”发送给HTML网页,网页中JavaScript 注册的监听函数开始执行处理事件。其实本质上实现的就是Browser进程发送消息到Render进程, Render进程执行 JavaScript注册的回调函数,同时传递从Browser进程发送过来的消息内容,最终消息的内容在JavaScript回调函数中处理。

2021-12-25 11:09:24 1165

原创 QT集成CEF11-JavaScript与C++异步调用

​ 在上一个章节《QT集成CEF10-JavaScript与C++互调》 中,JavaScript与C++之间已经能够相互调用了,但是它们只能在renderer进程中进行通信,不能跨进程通信。当JavaScript 也可以与renderer进行实现异步通信,可以参考上一章节中的sayHello 实现.​ 本章节将通过一个 使用JavaScript读取本地文本文件的案例来探索在CEF中如何实现JavaScript与C++之间跨进程的异步调用,关于CEF的进程间通信,在《QT集成CEF08-多进程通

2021-12-22 15:13:22 1742

原创 QT集成CEF10-JavaScript与C++互调

我们为什么要使用CEF? 很多情况下都是为了能够实现JavaScript与 native C++之间的相互调用。即网页中的JavaScript调用的时候,触发本地C++代码的执行,比如访问硬件等JavaScript无法完成的功能。本地C++代码也可以回调JavaScript,比如本地代码收到操作系统的一些通知后,将通知内容转交给JavaScript代码来执行。​ CEF中,JavaScript代码是运行在Renderer进行中的,理解这一点非常重要,native代码写的地方不合适,JavaScript代码

2021-12-21 12:43:41 2541 2

原创 QT集成CEF09-本地网页解决跨域问题

我们使用QT与CEF集成的目的是为了编写HTML5应用展示应用界面,将这些界面存放在本地使用CEF加载到浏览器中呈现UI界面,应用中所用到的数据可以使用ajax与远程服务器进行数据通信或者直接在网页中通过JavaScript调用本地C++代码实现本地通信。本小节讲解CEF如何加载本地网页,并解决本地网页与服务端Ajax通信跨域问题(CORS)。至于JavaScript与C++代码的相互调用将在下一节中讲解。1. 本地网页​ 首先我们需要准备本地Html5文件(*.js, *.html, *.css,

2021-12-11 13:38:08 2709

原创 QT集成CEF08-多进程通信

通过上一个章节理解了CEF3 的多进程,即一个主进程,一般主进程是Browser进程,其他的分别是渲染进程(Renderer),GPU加速进程(GPU),插件进程(NPAPI或者PPAPI)。Browser进程:负责窗口管理,界面绘制和网络交互。Renderer进程:负责JavaScript的执行与DOM节点维护NPAPI插件进程:按需创建,每种类型的插件只会有一个进程,每个插件进程可以被多个Render进程共享;GPU进程:按需创建,最多只有一个,当且仅当GPU硬件加速打开的时候才

2021-12-08 16:47:42 1914 4

原创 QT集成CEF07-理解CEF多进程

本小节主要理解CEF的多进程模型,为后面的JavaScript与C++ 通信做一些知识储备,顺便再次梳理一下CEF的启动流程。任务管理器观察多进程CEF基于Chromium,是多进程模型。怎么理解多进程?启动一个Chrome浏览器,多打开几个网站,然后再打开资源管理器查看Chrome的进程,现在对任务管理器做一些调整,目的是查看每个进程所启动的命令行以及命令行所携带的参数。如下图:勾选 “PID”和“命令行”此时可以看到Chrome浏览器开启的进程:可以看到Chrome浏览器启动了多个进程,28

2021-12-07 18:39:57 2387 3

原创 QT集成CEF06-F12开启DevTools窗口

​ CefClient 类中提供了 GetKeyboardHandler() 的回调,要求在CefClient 中提供 CefKeyboardHandler 对象。这个对象可以用来响应键盘事件。​ 本节我们为应用添加F12 用来打开开发者工具(DevTools)F5 刷新页面class CefClient : public virtual CefBaseRefCounted { public: /// ...省略 /// // Return the handler for key

2021-12-07 14:20:18 1866 2

原创 QT集成CEF05-嵌入到QT窗体

回顾一下CEF 的浏览器窗口是如何创建出来的:SimpleApp实现了CefBrowserProcessHandler 接口CefBrowserProcessHandler 接口中有一个OnContextInitialized 回调,它在CEF创建 context 初始化完毕后被回调。SimpleApp 实现了OnContextInitialized 回调,代码如下:void SimpleApp::OnContextInitialized() { CEF_REQUIRE_UI_THR

2021-12-06 18:46:02 3031 5

原创 QT集成CEF04-使用QT消息循环

在 《QT集成CEF03-QT简单集成》中使用 CEF自己的消息循环,浏览器窗口也是CEF创建并显示。在QT应用中,QT有自己的消息循环,作为QT与CEF集成的第一步就是要解决消息循环的问题。​ CEF可以不用它自己提供的消息循环,而与已经存在的程序中消息环境集成在一起。需要我们在设置CefSettings.multi_threaded_message_loop=true(Windows平台下有效)​ 下面对 main.cpp 进行改造。​ 开始前,保证QT 窗体文件存在, 这个窗体是自动

2021-12-06 12:24:32 1935 1

原创 QT集成CEF03-QT简单集成

使用 VS 2019 创建项目,在创建项目之前要先确保已经安装了 QT SDK 和 QT VS 插件。创建新项目的时候,选择 Qt Widgets Application准备CEF库上一个步骤中,已经编译好了 libcef_dll_wrapper 库,现在要在新的QT项目中使用这个库,需要做如下的准备。在解决方案目录下新建一个libs目录,用来存放第三方的库,目录结构如下:libs/cef/bin这个目录中存放的是 CEF运行的时候所需要的所有依赖文件(如 dll文件),分成了 d

2021-12-04 19:56:06 4355 6

原创 QT集成CEF02-编译libcef_dll_wrapper

进行这个步骤前,先完成 《QT集成CEF01-准备工作》准备新建一个文件夹,比如 e:\cef_win32,并在这个文件夹下创建一个 src目录,然后将下载的cef二进制包全部拷贝到这个目录中使用cmake打开cmake-gui.exe 在下载好的cmake文件夹中选择源码所在的目录E:/cef_win32/src 就是下载的cef所有的文件cmkae 编译以后生成的文件存放的目录E:/cef_win32 cmake运行后生成文件存放的目录执行cmake的 Co

2021-12-04 19:44:22 2081 2

原创 QT集成CEF01-准备工作

所有使用到的工具软件清单:CEF 二进制发行包下载地址,为了更具备通用性,本次编译的是 windows 32 bit , 版本为 cef_binary_91.1.22+gc67b5dd+chromium-91.0.4472.124_windows32cmake 编译工具下载官网: https://cmake.org/ ,本次使用 cmake-3.22.0-rc3-windows-x86_64.zipvisualstudio2019下载地址: https://visualstudio

2021-12-04 19:36:02 1527

原创 docker_swarm_集群创建_数据共享_负载均衡

1. 环境准备192.168.1.135manager135manager192.168.1.136node136node192.168.1.137node137node三个主机均安装docker,然后修改主机名:# 192.168.1.135hostnamectl set-hostname manager135# 192.168.1.136hostnamectl set-hostname node136# 192.168.1.137hostnamec

2020-09-03 16:59:58 803

原创 Docker 安装yapi服务

1. 安装mongodbmkdir -p ~/services/mongodb/data ~/services/mongodb/bakcd ~/services/mongodb#拉取镜像docker pull mongo:3.6cd ~/services/mongodb# 不用映射端口,因为是内部访问docker run --restart=always --name mongo -v /etc/localtime:/etc/localtime:ro -v $PWD/data:/data/d

2020-08-21 17:11:29 495

原创 14_使用vue-cli

1. 什么是 Vue CLI官方文档Vue CLI 是官方的一个 npm包,它是一个命令行工具。通过这个工具可以快速生成Vue项目。生成的项目基于webpack构建,并带有合理的默认配置npm install -g @vue/clinpm包全局安装后,就会得到一个 vue命令# 查看 vue cli 版本vue -V 2. 创建项目# 创建一个名称为 14_01_hello 的项目vue create 14_01_hello这里选择最后一项,手工选择特性:移动方向键,敲空格即

2020-08-21 17:06:38 127

原创 13_Vue_使用Vuex

1 .Vuex是什么​ 由于Vue是单向数据流,子组件内部不能直接修改从父级传递过来的数据,子组件与子组件之间无法相互传递数据。如果我们想让两个子组件之间进行通信的话,可以借助子组件 A 向父组件传值,父组件接收子组件 A 的数据后再传给 B 组件这样的方式进行通信。​ 但是这样会有一个问题,就是如果子组件 A 的父组件上面还有一层爷爷组件,或者还有更多祖父类型的层级,那么是不是会很麻烦。因此,我们会想到能不能我们将一个共有的数据存在一个特定的地方,用的时候自己去拿,这样就不需要一层层传值

2020-08-17 11:46:59 516

原创 QT_QWebEngineView_自制浏览器_01

0 .需求打开固定的站点网页,并能够正常浏览能打开本地的单页面HTML5应用(Vue),能够跨域发送Ajax请求到API接口获取数据拦截所有HTTP请求,请求发送之前添加自定义的请求头JavaScript 与本地代码相互通信比较简单的方案是 Electron, 使用 JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架。它可以完美解决上面所有问题。但是用它打包出来的应用体积过大。这里本着学习的态度,使用QT中的 QWebEngineView 来实现上面的需求。它与

2020-08-14 18:00:13 2223

原创 12_Vue_Ajax请求与Mock

1. 使用axios发送ajax请求​ 在构建应用时需要访问一个 API 并展示其数据。做这件事的方法有好几种,而使用基于 promise 的 HTTP 客户端 axios 则是其中非常流行的一种,它可以用在浏览器和 node.js 中1.1 安装axiosnpm i axios -S以下均来自官方文档1.2 axios配置项axios基本API为axios(config).then((response)=>{}).catch(()=>{})axios(config)

2020-08-13 10:55:38 355

原创 11_Vue路由

1. 什么是路由​ 访问一个web应用(或者网站),需要有一个URL,这个URL可以通过HTTP协议 POST或者GET或 PUT或DELETE到服务端,当服务端接收到这个请求地址之后,通过规则匹配URL,然后转发到后端应用程序中的某个方法(函数)调用上,方法(函数)调用完毕之后会生成HTML文本,随后HTML文本会响应到浏览器中,浏览器完成HTML渲染,最终就看到了一个完整的页面。​ 我们称这种将 URL转发到后端方法(函数)调用的过程叫做路由,匹配的规则集合就叫做路由表。1.1 后端路由​

2020-08-10 14:50:53 191

原创 10_Vue插件

1. 插件有什么用通常,我们需要为Vue 添加一些全局的扩展功能,此时就可以使用插件来进行扩展。所谓全局:即不需要像组件,指令,过滤器那样,每次使用它之前都需要引入一次。对于插件只要在最开始引入一次,在任何组件就可以直接使用。(类似于我们在window上添加的方法属性那样,任何地方都可以用)插件能实现的功能没有限制,不过常见下面几种:添加全局方法或者属性添加全局资源:组件/指令/过滤器添加Vue实例方法,通过把它们添加到Vue.prototype上实现。库,提供自己的API ,比如 vue-

2020-08-10 14:36:34 145

原创 9_Vue自定义指令与Filter

1. 内置指令​ Vue中定义了内置指令,可以查看 指令API文档 ,有些内置指令已经在前面学习过了。2. 自定义指令​ 除了内置的指令之外,也可以自定义指令。那什么时候需要自定义指令?引用官方文档:除了默认设置的核心指令( v-model 和 v-show ),Vue 也允许注册自定义指令。在Vue里,代码复用的主要形式和抽象是组件。然而,有的情况下,仍然需要对纯 DOM 元素进行底层操作,这时候就会用到自定义指令。指令是可以写在DOM元素的小命令,他们以v-为前缀,vue就能识别这是一个指

2020-08-10 14:33:34 190

原创 8_混入_Mixin

1. 什么是mixin​ 假设定义了两个组件,这两个组件非常相似,他们的基本功能是一样的,但他们之间又存在着足够的差异性,此时的你就像是来到了一个分岔路口:我是把它拆分成两个不同的组件呢?还是保留为一个组件,然后通过props传值来创造差异性从而进行区分呢?​ 如果拆分成两个组件,如果公共的功能出现变动,就需要同时更改两个组件,这违背了 DRY 原则。反之,太多的props传值会很快变得混乱不堪,从而使得维护变得很麻烦。​ 使用Mixin,可以将一个组件的选项(data,props,compu

2020-08-08 14:23:45 246

原创 7_Vue组件生命周期

1. Vue组件生命周期一个Vue组件就是一个Vue实例对象,当对象被实例化出来之后,要经过初始化数据、编译模板、挂载DOM->渲染、更新->渲染、卸载等一系列过程,这个过程就是组件的生命周期,各个阶段都有对应的事件钩子(实例方法的调用)。 前面章节中已经用到了 created和destroyed 这两个事件钩子,分别在创建后和销毁后调用。2. 官方生命周期图示参考文档: https://cn.vuejs.org/v2/guide/instance.html图片来源于网络红色方框就是

2020-08-08 11:33:21 320

原创 6_Vue父子组件通信与槽

1 .组件的组织一个应用会以一棵嵌套的组件树的形式来组织。上小节案例中 App.vue组件中使用了 ShowTime.vue 组件。 在浏览器上安装 Vue DevTools 插件,后可以通过插件看到它们之间的关系,开发Vue应用时也可以通过它方便调试。它可以直接在google 应用商店搜索安装。访问应用商店需要科学上网上小节案例中组件的结构如下:2 .父子组件通信-propsApp就是父组件,ShowTime就是子组件。 所谓父子组件通信其实就是如何把父组件中的数据传递到子组件中,

2020-08-07 19:28:18 230

原创 5_Vue组件定义与注册

1. Vue组件概述前面的章节中,我们只编写了一个App.vue这样一个 组件。 组件 (Component) 是 Vue.js 最强大的功能之一,可以说编写Vue应用就是在编写Vue组件,编写好的组件可以重复的使用。为了可重用性高,减少重复性开发,我们可以按照template、style、script的拆分方式,放置到对应的.vue文件中,一般格式为:<template> <div> ... </div></template><script

2020-08-07 19:12:46 305

原创 webpack4打包传统H5多页面

1. webpack核心概念入口(entry)输出(output)loader插件(plugins)官方文档: https://www.webpackjs.com/configuration/output/#output-filename1.1 入口指定 webpack 由哪个模块作为项目构建的开始.通过配置 entry 属性,指定一个或多个起点,默认值 ./src :用法: entry: string|Array ,可以是一个字符串也可以是一个数组,还可以是一个对象。modu

2020-08-01 16:52:16 2847 5

原创 4_静态资源处理

1. webpack中的resolve 配置在前面的项目中, src/main.js中引入 vue库是这样引入的:import Vue from 'vue/dist/vue.js'import App from './components/App.vue'Vue.component("App",App)new Vue({ el: '#app', template: '<App />',})npm 引入的库文件都在 node_modules中,webpack在处理main.

2020-07-30 18:21:46 492

原创 3_vue基础语法

1. 准备空项目拷贝上一节写好的 工程文件到新的项目目录下,按照目录结构存放这些文件。package.jsonwebpack.config.jsonindex.tplsrc/main.jssrc/components/App.vue后面所有编写的代码都会针对 App.vue文件来进行编辑。 组织好以后,打开命令行工具,执行 cnpm i 安装已经在package.json文件中声明的包文件到 node_modules 文件夹中src/componetns/App.vue文件内容,&l

2020-07-30 18:04:01 318

spring配置文件解释

解释spring配置文件中的 dtd与 xml Schema

2010-04-08

Hibernate中文参考

满江红翻译团队 翻译的hibernate参考文档

2008-06-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除