【安全认证】基于Shiro前后端分离的认证与授权(二.授权篇)

前面我们整合了SpringBoot+Shiro+JWT实现了登录认证,但还没有实现权限控制,这是接下来的工作。

阅读更多

【安全认证】基于Shiro前后端分离的认证与授权(一.认证篇)

1. 开始之前

1.1 技术选型

选用SpringBoot+Shiro+JWT实现登录认证,结合Redis服务实现token的续签,前端选用Vue动态构造路由及更细粒度的操作权限控制。

  • 前后端分离项目中,我们一般采用的是无状态登录:服务端不保存任何客户端请求者信息,客户端需要自己携带着信息去访问服务端,并且携带的信息可以被服务端辨认。
  • Shiro默认的拦截跳转都是跳转url页面,拦截校验机制恰恰使用的session;而前后端分离后,后端并无权干涉页面跳转。
  • 因此前后端分离项目中使用Shiro就需要对其进行改造,我们可以在整合Shiro的基础上自定义登录校验,继续整合JWT(或者oauth2.0等),使其成为支持服务端无状态登录,即token登录。
  • Vue项目中,只需要根据登录用户的权限信息动态的加载路由列表就可以动态的构造出访问菜单。

阅读更多

【安全认证】Shiro安全框架入门

1. 初识Shiro

Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密、会话管理、与Web集成、缓存等。

  • 具体来说,满足对如下元素的支持:

    • 用户,角色,权限(仅仅是操作权限,数据权限必须与业务需求紧密结合),资源(url)。
    • 用户分配角色,角色定义权限。
    • 访问授权时支持角色或者权限,并且支持多级的权限定义。

阅读更多

【Redis】基于Redis的分布式锁实现

SETNX命令简介

  • SETNX key value返回(1:key的值被设置,0:key的值没被设置),将key的值设为value,并且仅当key不存在。
  • 锁的key为目标数据的唯一键,value为锁的期望超时时间点;
  • 基于Redis实现的分布式锁,主要基于redissetnx(set if not exist)命令;

阅读更多

【ElasticStack】Beats+Logstash+Elasticsearch+Kibana基础整合

1. ElasticStack的组成

  1. Beats:数据采集
  2. LogStash: 数据处理
  3. ElasticSearch(核心引擎): 数据存储、查询和分析
  4. Kibana: 数据探索与可视化分析

阅读更多

【ElasticStack】ElasticSearch聚合分析与数据建模

1. ElasticSearch中的聚合分析

聚合分析,英文Aggregation,是ES除了搜索功能之外提供的针对ES数据进行统计分析的功能。

  • 特点:
    • ①功能丰富,可满足大部分分析需求;
    • ②实时性高,所有计算结果实时返回。
  • 基于分析规则的不同,ES将聚合分析主要划分为以下4种:
    1. Metric: 指标分析类型,如:计算最值,平均值等;
    2. Bucket: 分桶类型,类似于group by语法,根据一定规则划分为若干个桶分类;
    3. Pipeline: 管道分析类型,基于上一级的聚合分析结果进行再分析;
    4. Matrix: 矩阵分析类型。

阅读更多

【ElasticStack】ElasticSearch分布式特性 与 Search机制

1. ElasticSearch的分布式特性

1.1 分布式介绍

  1. ES支持集群模式,即一个分布式系统。其好处主要有以下2个:
    1. 可增大系统容量。比如:内存、磁盘的增加使得ES能够支持PB级别的数据;
    2. 提高了系统可用性。即使一部分节点停止服务,集群依然可以正常对外服务。
  2. ES集群由多个ES实例构成。
    • 不同集群通过集群名字来区分,通过配置文件elasticsearch.yml中的cluster.name可以修改,默认为elasticsearch
    • 每个ES实例的本质,其实是一个JVM进程,且有自己的名字,通过配置文件中的node.name可以修改。

阅读更多

【ElasticStack】ElasticSearch入门

1. 概述

1.1 ElasticStack特点

  1. 使用门槛低,开发周期短,上线快
  2. 性能好,查询快,实时展示结果
  3. 扩容方便,快速支撑增长迅猛的数据

阅读更多

【并发编程】NIO、Netty及websocket实现

1. BIO/NIO/AIO演变

Java IO 方式有很多种,基于不同的IO抽象模型和交互方式,可以进行简单区分。

阅读更多

【并发编程】阻塞队列 与 线程池

  • 池和队列的关系
    • 线程池或者数据库连接池,都有最大限制。如果超出了限制数量,则新进来的申请连接都要放入额外的队列里,等到池空出来时,从队列中取出连接放进池里。

阅读更多