前后端不分离回调和注销登录
写在前面按照顺序接下来应该学习登录实现的机制,但是考虑到这是入门文章,因此这里先跳过,后续再来介绍。
接下来需要针对登录成功后的两种较为普遍的场景进行介绍,其实就是前后端分离和前后端不分离这两种情况,两种情况的处理方式是不相同的,本篇介绍前后端不分离模式下的处理方式,前后端分离模式则在下篇进行介绍,同时还会学习如何注销登录。
登录成功回调SpringSecurity中有两个方法与登录成功重定向URL相关,分别是successForwardUrl和defaultSuccessUrl,那么你可能就要问了,我怎么知道这两个方法与登录成功重定向URL相关呢?
前面说过SpringSecurity中与登录相关的配置信息都在FormLoginConfigurer类中,因此回到FormLoginConfigurer和它的父类AbstractAuthenticationFilterConfigurer中,可以发现前者存在successForwardUrl方法,而后者存在defaultSuccessUrl方法。
FormLoginConfigurer#successForwardUrl方法源码如下所示: ...
自定义信息
写在前面前面使用的登录表单是Spring Security自带的,在实际开发过程中用户都会自定义登录表单、样式文件、登录接口、登录参数名称等信息,因此本篇就来研究这些内容。
自定义信息登录表单自定义SpringSecurity默认提供的登陆表单样式如下所示:
如果开发者想自定义该登陆页面及样式这也是允许的,首先用户需要在resourses文件夹下新建static目录,并在该目录中新建login.html文件,其中的代码为:
1234567891011121314151617181920212223242526272829303132333435<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>登录</title> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.5/cs ...
快速入门
在SpringBoot入门篇中曾经介绍过Spring Security的基本使用,但是考虑到实际开发过程中对于Spring Security的严苛要求,于是准备花点时间来深入研究一下SpringSecurity权限框架。
Spring Security介绍理由在介绍Spring Security之前需要介绍为什么不选择Shiro。个人觉得有三点:(1)Apache Shiro是一个轻量级的安全管理框架,提供了认证、授权、会话管理、密码管理、缓存管理等功能,而Spring Security则是一个更为复杂的安全管理框架,功能比Shiro更强大,权限控制细粒度更高,对于OAuth2的支持也更友好。(2)Spring Security源自Spring全家桶,因此与Spring框架可以做到无缝整合。(3)SpringBoot中提供了Spring Security的自动化配置方案,使得Spring Security的使用变得更加便捷。
来源其实Spring Security最早不叫Spring Security ,而是叫Acegi Security,Acegi英文意思是取消,意味着使用Acegi ...
搭建前后端分离的权限系统
#写在前面前面我们使用Spring Boot+Shiro框架搭建的权限管理系统只使用于前后端一体化的项目,并不适用于当前最流行的前后端分离架构。要实现前后端分离,那么需要考虑两点:一是项目不再基于Session,那么此时如何确认访问者身份;二是如何确认访问者所具有的权限。如果你之前有过前后端分离的开发经验,肯定知道前后端分离一般依靠的都是token,即采用token来实现。用户登录时会生成token及token过期时间,而token与用户是一一对应关系,在调用接口的时候,将token放入header或者请求参数中,这样服务端就知道当前是哪个用户在调用接口。
由于本篇主要介绍如何实现前后端分离,因此关于前端的代码这里就忽略,详细的前端会在后面文章进行介绍。
新建SpringBoot项目使用spring Initializr构建工具构建一个SpringBoot的Web应用,名称为shiro-fontback,然后在pom.xml文件中添加Shiro依赖以及Swagger依赖,代码为:
12345678910111213141516171819202122232425262728293031 ...
搭建RESTful风格权限系统
写在前面前面我们使用SpringBoot集成Shiro搭建了一个简易的权限管理系统,但是那种在实际开发过程中用的不多,本篇来学习另一种较为常见的SpringBoot集成Shiro搭建权限管理系统,这里就不使用Thymeleaf模板引擎,而是直接返回RESTful风格的API。
新建SpringBoot项目使用spring Initializr构建工具构建一个SpringBoot的Web应用,名称为shiro-swagger,然后在pom.xml文件中添加Shiro依赖以及页面模板引擎依赖,代码为:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...
SpringBoot集成Shiro搭建简易权限系统
写在前面前面学习的都是通过模拟数据库这一方式来学习,在实际开发过程中都是直接连接数据库,因此本篇将搭建一个使用Shiro框架实现的权限校验系统。
新建SpringBoot项目使用spring Initializr构建工具构建一个SpringBoot的Web应用,名称为envy-shiro,然后在pom.xml文件中添加Shiro依赖以及页面模板引擎依赖,代码为:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950<dependencies> <!--添加Shiro依赖--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.4.0</version& ...
密码加密和SpringBoot集成Shiro
写在前面Shiro是一个安全框架,除了提供前面介绍的认证和授权之外,还可以对用户密码进行加密,那么本篇就来学习Shiro如何对密码进行加密,并介绍如何在SpringBoot中使用Shiro框架。
MD5加密前面我们无论是读取配置文件中的密码还是模拟数据库中的密码,使用的都是明文密码,显然这是不安全的,因此很多情况下我们都会采用加密算法,尤其是采用非对称加密,其实就是不可逆加密,常用的MD5加密算法就是这样的一种算法。
举个例子,下面一段代码演示了如何利用MD5加密算法对密码1234进行加密:
12345public static void main(String[] args){ String password = "1234"; String encodePassword = new Md5Hash(password).toString(); System.out.println(encodePassword); };
执行结果如下所示:
181dc9bdb52d04dc20036dbd8313ed055
由于这是非对称 ...
自定义Realm
写在前面通过前面的学习,我们知道实际进行权限信息验证的是Realm,而Shiro框架内部提供了两种实现,一种是查询.ini文件的IniRealm;另一种是查询数据库的JdbcRealm。那么本篇就来分别研究这两个实现。
本篇主要学习以下内容:(1)Realm;(2)Shiro功能;(3)Shiro优点:(4)Shiro架构:(5)Shiro概念:(6)Shiro认证流程:(7)Shiro授权流程。
RealmShiro从Realm中获取安全数据(用户、角色、权限),也就是说SecurityManager想要验证用户身份,那么它必须从Realm中获取安全数据进而来确定用户的身份是否合法,之后判断用户是否具有某个角色,某个权限。
自定义Realm一般来说,自定义Realm都需要继承org.apache.shiro.realm.AuthorizingRealm类,查看一下这个类的源码,如下所示:
1public abstract class AuthorizingRealm extends AuthenticatingRealm implements Authorizer, Initiali ...
快速入门
写在前面本篇开始学习Shiro安全框架,这是一个开源的轻量级的Java安全框架,在一些中小型项目中推荐使用Shiro安全框架。
本篇主要学习以下内容:(1)Shiro简介;(2)Shiro功能;(3)Shiro优点;(4)Shiro架构;(5)Shiro概念;(6)Shiro认证流程;(7)Shiro授权流程;(8)Shiro标签;(9)权限。
ShiroShiro简介Apache Shiro是一个开源的轻量级的Java安全框架,它提供身份验证、授权、密码管理以及会话管理等功能。相对于Spring Security, Shiro框架更加直观、易用,同时也能提供健壮的安全性。
Shiro功能Shiro框架相比于Spring Security更加轻量级,但是它也提供了一些基础的,能满足日常开发所需的权限控制功能。
Shiro框架提供的功能如下所示:(1)提供登录用户身份的验证;(2)用户访问权限控制和登陆认证,注意这个有两层含义,其一是用户登录验证;其二是用户登录后授权,即用户拥有访问哪些接口的权限;(3)可以响应认证、访问控制或者Session生命周期中发生的事件;(4)支持单点登录SS ...
YARN入门
写在前面接下来学习Hadoop生态系统中的第三个重要组成部分YARN。本篇主要学习YARN的产生背景、YARN是什么以及YARN的架构设计等内容,可以快速入门YARN。
YARN产生背景MapReduce1.0存在的问题首先来看一张图,该图是Hadoop1.x中MapReduce的构成结果,如下所示:
我们知道在Hadoop1.x中,MapReduce是Master/Slave(主从)结构,在集群中的表现形式为一个JobTracker带多个TaskTracker。其中JobTracker负责资源管理和作业调度,TaskTracker定期向JobTracker汇报本节点的健康、资源使用、任务执行等情况以及接收和执行来自JobTracker的操作指令,如启动/杀死任务等。
显然上述结构存在明显的问题:(1)单节点故障。由于JobTracker节点只有一个,因此如果该节点不可用,将会导致整个集群不可用;(2)节点压力大。JobTracker负责接收来自各个TaskTracker节点的RPC请求,因此该节点上的请求压力很大,限制了集群的扩展,且随着节点规模增大,JobTracker必定会成为 ...