shiro学习笔记01
Shiro笔记1、权限的管理1.1 什么是权限管理基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。
权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。
1.2 什么是身份认证身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。
1.3 什么是授权授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的
二、什么是shiro1Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authenticat ...
screw数据库文档生成插件
# 🚀 screw (螺丝钉) 简洁好用的数据库表结构文档生成工具
##### **自动生成数据库表结构文档**(markdown)
经常会有编写数据库表结构文档的时间付出,大部分企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写、后期运维开发,需要手动进行维护到文档中,很是繁琐、如果忘记一次维护、就会给以后工作造成很多困扰、无形中制造了很多坑留给自己和后人
这块插件很好解决了这个问题
#### 1.数据库支持
支持:MySQL MariaDB Oracle SqlServer PostgreSQL Cache DB(2016) TIDB 达梦
不支持:H2,DB2,HSQL,SOLite等
#### 2.导出文档生成支持
html word markdown
#### 3.文档生成效果截图
##### 列子:Html
![HTML](https://images.gitee.com/uploads/images/2020/0622/161414_74cd0b68_1407605.png)
![screw-logo](https://images ...
MongoDb初识
MongoDB安装MongoDB
安装windos 版本
mongodb-win32-x86_64-2008plus-ssl-4.0.10-signed
百度云盘 链接:https://pan.baidu.com/s/1zoRzUMym6qV7rw0HNVn4lg 提取码:bj9s
配置环境变量
E:\Program Files\MongoDB\Server\4.0\bin
启动服务器时mongod --dbpath 数据库路径 --port 端口号
基本概念1.数据库(database)
数据库的服务器 -用来保存数据 mongod 用来启动服务器 4.0版本以上 自动启动
数据库的客户端 -用来操作服务器 对数据进行增删改查的操作 mongo 用来启动客户端
2.集合(collection)
3.文档(document)
在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不 存在会自动创建数据库和集合。
基本指令
show dbs show d ...
Jwt
JWT什么是JWT12345#1.官方翻译官方地址:https://jwt.io/introductionJSON Web Token (JWT) 是一个开放标准 ( RFC 7519 ),它定义了一种紧凑且自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。该信息可以被验证和信任,因为它是经过数字签名的。JWT 可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。#2.通俗解释Jwt简称JSON Web Token 也就是通过Json形式作为Web应用中的令牌,用于在各方之间安全的将信息作为Json对象传输。在数据传输过程中可以完成数据加密,签名等相关处理。
什么时候应该使用JSON网络令牌以下是JSON Web Tokens有用的一些场景:
授权:这是使用 JWT 最常见的场景。用户登录后,每个后续请求都将包含 JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是当今广泛使用 JWT 的一项功能,因为它的开销很小,并且能够轻松跨不同域使用。
信息交换:JSON Web Tokens 是一种在各方之间安全传输信息的好方法。因为 J ...
lombok中@Builder
Lombok中的@Builder12345 一般在构造一个javaBean对象时,有三种写法: 1、直接通过构造函数传参的方式设置属性,但属性过多的话会让构造函数十分臃肿,而且不能灵活的选择只设置某些参数。 2、采用重叠构造器模式,先写第一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个构造器有两个可选参数,以此类推;如果参数比较多时,类里面会出现一堆构造方法,容易出错。 3、采用Javabean的写法,写一堆属性的setter方法,通过调用setter方法给属性赋值。 这种方法有个劣势就是构造的过程被分到几个调用中,在构造中可能处于不一致状态,无法保证一致性。 而Lombok 插件中的@Builer,可以放在类、构造函数或方法上,它可以帮我们快速实现一个builder模式,builder模式既解决了重叠构造器容易出错,也解决了Javabean的不一致问题
简述:Builder 使用创建者模式又叫建造者模式。简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程。
基础使用@Builder注释为你的类生成相对略微复杂 ...
java拦截器Interceptor
Java拦截器(Inteerceptor)1.什么是拦截器概念:java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式
作用域:动态拦截Action调用的对象(Controller)
原理:大部分的时候,拦截器方法都是通过代理的方式来调用的。
使用AOP切面功能来实现
Struts2的拦截器实现相对简单。当请求到达Struts的ServletDispatcher时,会查找配置文件,并根据配置实例化相对的拦截器对象,然后串成一个列表(List),最后一个一个的调用列表中的拦截器。Struts2的拦截器是可插拔的,拦截器是AOP的一个实现。Struts2拦截器栈就是将拦截器按一定的顺序连接成一条链。在访问被拦截的方法或者字段时,Struts2拦截器链中的拦截器就会按照之前定义的顺序进行调用。
使用Spring的拦截器相关接口来自定义拦截器
实现WebMvcConfigurer接口,重写addCorsMappings() ...
java过滤器Filter
Java过滤器(Filter)1.什么是过滤器Servlet中的过滤器Filter实现了javax.servlet.Filter接口的服务器端程序,主要用途是过滤字符编码,做一些业务逻辑判断如是否有权限访问页面等
拦截请求,过滤响应
2.运行原理当客户端向服务器端发送一个请求时,如果有对应的过滤器进行拦截,过滤器可以改变请求的内容、或者重新设置请求协议的相关信息等,然后再将请求发送给服务器端的Servlet进行处理。当Servlet对客户端做出响应时,过滤器同样可以进行拦截,将响应内容进行修改或者重新设置后,再响应给客户端浏览器。在上述过程中,客户端与服务器端并不需要知道过滤器的存在。
在一个Web应用程序中,可以部署多个过滤器进行拦截,这些过滤器组成了一个过滤器链。过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过滤器之间传递,直到服务器端的Servlet。具体执行流程如下应用场景自动登录统一设置编码格式访问权限控制敏感字符过滤等
123456789101112131415161718192021222324252627282930313233343536373839@ ...
java监听器Listener
Java监听器(Listener)Servlert的监听器Listener,它是实现了javax.servlet.ServletContextListener接口的服务器端程序,随着web应用的启动而启动,只初始化一次,随web应用的停止而销毁。
1.主要作用:application、session、request三个对象创建、销毁时候或者往其中添加修改删除属性时自动执行代码的功能组件
做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者一个固定的对象等等
1234567public interface ServletContextListener extends EventListener { //应用监听器的初始化方法 public void contextInitialized(ServletContextEvent sce); //应用监听器的销毁方法 public void contextDestroyed(ServletContextEvent sce);}
1.ServletContextListener:对Ser ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
redis分布式锁
Redis分布式锁分布式锁,是一种思想,它的实现方式有很多。比如,我们将沙滩当做分布式锁的组件,那么它看起来应该是这样的:
加锁
在沙滩上踩一脚,留下自己的脚印,就对应了加锁操作。其他进程或者线程,看到沙滩上已经有脚印,证明锁已被别人持有,则等待。
解锁
把脚印从沙滩上抹去,就是解锁的过程。
锁超时
为了避免死锁,我们可以设置一阵风,在单位时间后刮起,将脚印自动抹去。
分布式锁的实现有很多,比如基于数据库、memcached、Redis、系统文件、zookeeper等。它们的核心的理念跟上面的过程大致相同。
Jedis1、加锁加锁实际上就是在redis中,给Key键设置一个值,为避免死锁,并给定一个过期时间。
1SET lock_key random_value NX PX 5000
值得注意的是: random_value 是客户端生成的唯一的字符串。 NX 代表只在键不存在时,才对键进行设置操作。 PX 5000 设置键的过期时间为5000毫秒。
这样,如果上面的命令执行成功,则证明客户端获取到了锁。
2、解锁解锁的过程就是将Key键删除。但也不能乱删,不能说客户端1 ...