自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 资源 (5)
  • 收藏
  • 关注

原创 5、oauth2之资源服务配置类EnableResourceServer

简介资源服务器会对所有的请求进行拦截认证,当然除了oauth相关的请求之外。同时会创建一个拦截器OAuth2AuthenticationProcessingFilter,该拦截器会对请求头Authorization中的值进行相关验证。使用方式:1、添加注解@EnableResourceServer2、继承ResourceServerConfigurerAdapter@Configuration@EnableResourceServerpublic static class Reso

2021-07-03 18:01:10 6949 2

原创 4、oauth2之认证服务配置类EnableAuthorizationServer

前几节主要介绍了什么是oauth2,以及spring security oauth2的简单用法。下面我们来看下oauth2的认证服务和资源服务它们是怎么配置的,流程又是什么样的,首先来看下认证服务。使用方式:1、添加注解@EnableAuthorizationServer2、继承AuthorizationServerConfigurerAdapter@Configuration@EnableAuthorizationServerpublic class AuthorizationSer

2021-07-03 17:58:29 4546

原创 3、oauth2授权之自定义ClientDetailsService

oauth的客户端凭证校验是通过ClientDetailsService来实现的。oauth默认为我们提供了InMemoryClientDetailsService和JdbcClientDetailsService,当然我们也可以自己实现ClientDetailsService。1、新建CustomClientDetailService实现ClientDetailsService接口。ps:这里我们需要加上@Primary把该类当成是主类,因为在@EnableAuthorizat...

2021-07-03 17:56:10 5043 1

原创 2、oauth2授权

这篇文章我们来简单介绍下如何使用oauth的授权接口。oauth2为我们提供了认证服务和资源服务,认证服务需要引入@EnableAuthorizationServer来开启,资源服务需要引入 @EnableResourceServer来开启。 oauth2的授权接口是oauth/token,通过TokenEndpoint暴露该接口,而TokenEndpoint是通过注解@EnableAuthorizationServer引入的。下面我们通过一个简单的示例来了解一下oauth2的认证过程1、引入依赖

2021-07-03 17:54:34 451

原创 1、oauth2简介

什么是oauth2oauth2是一个授权机制,用来授权第三方应用,获取用户数据。OAuth2角色oauth2定义了四个角色资源所有者 - 应用程序的用户。 客户端 - 需要访问资源服务器上的用户数据的应用程序。 资源服务器 - 存储用户数据和http服务,可以将用户数据返回给经过身份验证的客户端。 授权服务器 - 负责验证用户的身份并提供授权令牌。资源服务器接受此令牌并验证您的身份。OAuth2的交互过程:oauth2的授权方式 oauth2的授权方...

2021-07-03 17:49:23 465

原创 14、spring security拦截器之FilterSecurityInterceptor

FilterSecurityInterceptor:对需要认证的请求进行拦截,通过调用accessDecisionManager.decide(Authentication authentication, Object object,Collection configAttributes)来判断是否可以有相应的访问权限public void doFilter(ServletRequest request, ServletResponse response, FilterChain ch

2021-06-26 12:35:26 517

原创 13、spring security拦截器之ExceptionTranslationFilter

ExceptionTranslationFilter:异常处理,对AuthenticationException和AccessDeniedException进行处理public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletR

2021-06-26 12:33:12 487

原创 12、spring security拦截器之AnonymousAuthenticationFilter

AnonymousAuthenticationFilter:如果当前安全上下文的Authentication为空,则创建一个匿名的Authentication用户public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException //判断SecurityContext中的Authentication是否为空 i

2021-06-26 09:21:37 842

原创 11、spring security拦截器之RequestCacheAwareFilter

RequestCacheAwareFilter:从session中获取SavedRequest,如果当前请求信息和SaveRequest信息一致(一般是登录成功后重定向),则返回SavedRequestAwareWrapper的HttpServletRequest包装类,这样的话,可以获取认证失败前的请求参数等信息//获取包装类SavedRequestAwareWrapper,如果当前的request和session中SavedRequest//是一致的话,返回SavedRequestAwareWr

2021-06-26 09:19:47 727

原创 10、spring security拦截器之UsernamePasswordAuthenticationFilter

UsernamePasswordAuthenticationFilter:登录验证在SecurityConfig中对应:http.formLogin() //表单登录 .loginPage("/login.html") //登录页面 .loginProcessingUrl("/login") //登录的url,默认:/login .usernameParameter("username") //用户名参数名称,默认:username

2021-06-24 20:31:05 865

原创 9、spring security拦截器之LogoutFilter

LogoutFilter:注销过滤器,默认的url是logoutpublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (Ht

2021-06-24 20:29:22 431

原创 8、spring security拦截器之HeaderWriterFilter

HeaderWriterFilter:在请求前后写入一些header信息@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { //shouldWriteHeadersEagerly:为true,则在请

2021-06-24 20:28:13 744

原创 7、spring security拦截器之SecurityContextPersistenceFilter

SecurityContextPersistenceFilter:创建空SecurityContext并设置到SecurityContextHolderpublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest

2021-06-24 20:27:09 200

原创 6、spring security拦截器之WebAsyncManagerIntegrationFilter

WebAsyncManagerIntegrationFilter:主要是设置了SecurityContextCallableProcessingInterceptor拦截器。该拦截器是在处理前后设置或清除SecurityContext@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)

2021-06-24 20:26:01 287

原创 5、spring security拦截器之FilterChainProxy

FilterChainProxy是一个拦截器链路代理,它会递归去调用里面的拦截器。@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { boolean clearContext = request.getAttribute(FILTER_APPLIED) == n

2021-06-24 20:24:51 462

原创 4、spring security流程解读之Filter

从第三节中我们可以知道,spring security拦截器的主入口是FilterChainProxy,默认配置的过滤器有:FilterChainProxyWebAsyncManagerIntegrationFilterSecurityContextPersistenceFilterHeaderWriterFilterLogoutFilterUsernamePasswordAuthenticationFilterRequestCacheAwareFilterSecurityC

2021-06-24 20:23:32 120

原创 3、spring security流程解读之WebSecurityConfiguration

使用WebSecurity创建了FilterChainProxy拦截的链路代理类,对请求进行拦截。可以通过继承WebSecurityConfigurerAdapter对其进行任意的配置@Bean(name = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME)public Filter springSecurityFilterChain() throws Exception { //判断是否有WebSecurityCo

2021-06-24 20:19:55 735 1

原创 2、spring security流程解读之自动配置类

在上一节我们介绍了怎么去使用spring security及相关配置的使用。接下来我们来看一下spring security的整个运行流程。我们使用的是springboot项目,那么springboot的特点是配置自动加载。所以我们第一步是先找到对应的spring security的自动配置类。找到spring-boot-autoconfigure jar包,查看META-INF/spring.factories文件,发现有3个和security servlet相关的自动配置 ,下面对这3个配置类进

2021-06-24 20:16:03 294 1

原创 1、简单使用

什么是spring security它是一个功能强大且高度可定制的身份认证和访问框架。简单框架搭建1、创建项目,并引入spring security依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.4

2021-06-24 20:10:40 164

原创 10、组件component

组件复用<div id="app"> <!--组件复用--> <div> <button-counter></button-counter> <button-counter></button-counter> </div> </div> <script> var data = { }; <!--data必

2020-12-16 16:54:56 111

原创 9、表单

文本<div id="app"> <!--文本框--> <div> <input v-model="message" placeholder="edit me"/> <p>message={{message}}</p> </div> </div> <script type="text/javascript"> var data = { mess

2020-12-15 11:55:28 57

原创 8、事件处理

事件修饰符vue为v-on提供了事件修饰符,事件修饰符是以点为开头的指令后缀来表示的,如下.stop.prevent.capture.self.once.passive示例:<!-- 阻止单击事件继续传播 --><a v-on:click.stop="doThis"></a><!-- 提交事件不再重载页面 --><form v-on:submit.prevent="onSubmit"></form>&lt

2020-12-14 10:53:28 60

原创 6、style和class绑定

style示例:<body> <div id="app"> <div v-bind:style="styleObejct">style</div> <div v-bind:style="{color:'red', fontSize:'20px'}">style2</div> </div> <script> var data = { styl

2020-12-12 11:29:10 61

原创 5、计算属性computed

computedcomputed是一种基于响应式依赖进行缓存的。示例:<body> <div id="app" v-bind:title="message"> <div>{{random2}}</div> <div>{{random2}}</div> <div>{{random()}}</div> <div>{{random()}}</div> <

2020-12-11 15:14:58 113

原创 4、模板语法

渲染文本默认情况下,修改变量的值元素里面的变量值也会随之更改,比如<div id="app"> <div>{{message}}</div> </div> <script> var data = { message:"hello vue" }; var vm = new Vue({ "el":"#app", data:data }); vm.message =

2020-12-11 14:49:36 62

原创 3、vue的生命周期

2020-12-11 13:50:12 43

原创 2、监视watch

监视属性通过watch属性可以监视指定变量的变化<body> <div id="app"> <div v-bind:title="message">{{message}}</div> </div> <script> var data = { message:"hello vue" }; var vue = new Vue({ el:"#app", data:data

2020-12-11 12:00:09 78

原创 1、Vue的创建及基本使用

变量渲染使用"{{}}"来引入变量。<div id="app"> <div>{{message}}</div></div><script> var data = { message:"hello vue" }; var vue = new Vue({ el:"#app", data:data });</script>元素绑定v-bind通过v-bind:attributeName可以绑定元素的at

2020-12-11 11:40:52 53

原创 19、内存模型

1、内存统计查看内存:127.0.0.1:6379> info memory# Memoryused_memory:689408used_memory_human:673.25Kused_memory_rss:652472used_memory_rss_human:637.18Kused_memory_peak:766384used_memory_peak_human:748.42Ktotal_system_memory:0total_system_memory_human:0B

2020-10-21 15:22:04 185

原创 18、客户端协议RESP

RESP(REdis Serialization Protocol,redis序列化协议)语法:CRLF代表\r\n*<参数数量> CRLF$<参数1的字节数量> CRLF<参数1> CRLF...$<参数N的字节数量> CRLF<参数N> CRLF  示例:set hello world  客户端会将set hello world封装成*3\r\n$3\r\nset$5\r\nhello\r\n$5\r\nworld\r\

2020-10-21 13:47:44 102

原创 17、慢日志查询

相关参数  slowlog-log-slower-than:执行时间超过微秒(1秒=1000毫秒=1000000微秒),命令请求记录到日志上,默认10000(10毫秒)  slowlog-max-len:日志长度,默认128命令  slowlog get [n]:获取慢查询日志,n指定条数  示例:1) (integer) 6652) (integer) 14567184003) (integer) 120064) 1) "SETEX"2) "video_info_200"3) "30

2020-10-21 12:00:18 100

原创 16、sort排序

sort <key> [asc] [desc]:根据指定key的值排序,key的值只能是数字示例:127.0.0.1:6379> rpush numbers 5 3 4(integer) 3127.0.0.1:6379> sort numbers1) "3"2) "4"3) "5"sort <key> [alpha] [asc] [desc]:根据指定key的值排序,key的值可以是数字或字母示例:127.0.0.1:6379> sadd l

2020-10-21 11:57:22 311

原创 16、LUA

  redis服务器创建了一个伪客户端用来执行lua命令,lua_scripts字典用来保存lua脚本命令:  eval <脚本内容> <key个数> [key列表] [参数列表]:执行指定的脚本  示例:127.0.0.1:6379> eval 'return "hello " .. KEYS[1] .. ARGV[1]' 1 redis world"hello redisworld"  evalsha <校验和> <key个数> [ke

2020-10-21 11:53:10 100

原创 15、事务

语法multi命令1…命令Nexec或者discard示例:127.0.0.1:6379> multiOK127.0.0.1:6379> set name valueQUEUED127.0.0.1:6379> get nameQUEUED127.0.0.1:6379> exec1) OK2) "value"事务队列当客户端以事务状态运行时,除了exec和discard命令,其他的命令都会保存在redisClient/mstate里typedef st

2020-10-21 11:42:30 70

原创 14、发布与订阅

订阅:subscribe news.sport news取消订阅:unsubscribe news.sport发布:publish news.sport hello模式订阅:psubscribe news.*取消模式订阅:punsubscribe news.*查看已订阅的频道:pubsub channels [pattern]查看指定频道的订阅数:pubsub numsub [channel…]查看指定频道的模式订阅数:pubsub numpat [channel…]...

2020-10-21 11:30:26 56

原创 13、集群

启动集群  修改配置文件,设置cluster-enabled yes命令cluster info:查看集群信息cluster nodes:查看集群节点cluster meet ip port:关联节点到集群中cluster addslots <slot> ...:分配槽cluster keyslot <key>:计算key所在槽cluster getkeysinslot <slot> <count>:返回指定槽的count数据库键cluste

2020-10-21 10:53:31 81

原创 11、哨兵sentinel

Sentinel 命令  PING :返回 PONG 。  SENTINEL masters :列出所有被监视的主服务器,以及这些主服务器的当前状态。  SENTINEL slaves :列出给定主服务器的所有从服务器,以及这些从服务器的当前状态。  SENTINEL get-master-addr-by-name : 返回给定名字的主服务器的 IP 地址和端口号。 如果这个主服务器正在执行故障转移操作, 或者针对这个主服务器的故障转移操作已经完成, 那么这个命令返回新的主服务器的 IP 地址和

2020-10-20 16:42:22 286

原创 10、主从服务

复制过程  1、从服务器发送psync命令给主服务器,如果是第一次进行主从复制,那么发送psync ? -1命令,否则会发送psync 命令  2、主服务收到psync命令后,根据发送来的命令判断是完整同步还是部分同步,如果是完整同步,执行bgsave命令,后台会生成一个RDB文件,同时返回+FULLRESYNC 给从服务器,并且用一个缓冲区记录从现在开始所有的写命令。如果是部分同步,返回+CONTINUE给客户端标识进行部分同步操作。  3、从服务器将主服务发送的RDB文件或者复制挤压缓冲区的谢

2020-10-19 18:29:32 339

原创 9、服务器

serverCron函数  redis服务器中的serverCron函数默认每100ms执行一次(通过hz属性设置)更新服务器缓存时间  redis服务器中有不少地方获取当前时间,而每获取一次都要执行一次系统调用,为了减少调用次数,服务状态中的unixtime和mstime被用作当前时间的缓存,这两个时间会以每100ms的频率更新一次更新LRU时钟  redisServer.lruclock,保存了服务器的lru时钟,默认每10秒更新一次,redisClient.lru保存了最后一次命令的访问时间

2020-10-19 17:33:49 64

原创 8、客户端

客户端属性:  套接字描述符: redisClient.fd属性值可以是-1或者是大于-1的整数    伪客户端的fd属性值是-1,伪客户端处理的命令请求来源于载入AOF文件或者lua脚本,而不是网络,所以这种客户端不需要套接字连接,自然也不需要记录套接字描述符。    普通客户端的fd属性大于-1,因为它要通过套接字来于服务器进行通信,所有服务器会用fd属性来记录客户端套接字的描述符  输入缓冲区:redisClient.querybuf,用来保存客户端的请求命令命令参数:redisCilent

2020-10-19 17:29:00 94

Redis开发与运维

由付磊、张益军编著的《Redis开发与运维》 是一本从开发、运维两个角度总结了Redis实战经验,深入浅出地剖析底层实现,包含大规模集群开发与运维的实际案例与应用技巧的书籍。

2018-09-05

jqzoom2.3,另附示例代码和jqzoom2.3文档

jqzoom2.3,能让你的图片放大,本插件小巧实用,另附示例代码和jqzoom2.3文档,傻瓜式操作

2014-10-21

mybatis-3.2.2的jar包以及源代码,另外还有mybatis的PDF文档

mybatis-3.2.2的jar包以及源代码,另外还有mybatis的PDF文档

2014-10-21

贵美商城源代码(包含素材)

贵美商城源代码(包含素材)这是我们上机课做的项目,分享一下。

2013-09-17

空空如也

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

TA关注的人

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