`

106.1 Spring Boot之Shiro无状态(1)【从零开始学Spring Boot】

阅读更多

 

【视频&交流平台】

à SpringBoot视频

http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à SpringCloud视频

http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à Spring Boot源码

https://gitee.com/happyangellxq520/spring-boot

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

 

       【原创文章,转载请注明出处】

       问题的提出:在一些环境中,可能需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登录。如一些REST风格的API,如果不使用OAuth2协议,就可以使用如REST+HMAC认证进行访问。HMACHash-based Message Authentication Code):基于散列的消息认证码,使用一个密钥和一个消息作为输入,生成它们的消息摘要。注意该密钥只有客户端和服务端知道,其他第三方是不知道的。访问时使用该消息摘要进行传播,服务端然后对该消息摘要进行验证。

       本节博客就是要解决上面的问题,在进行正式写博客之前,我需要在此感谢一些朋友,因为这些朋友的存在,我们的QQ群才能顺利升级到了2000人。他们是:俊博、50%、似曾相识、ク方ゑ▁▂▃、蕉啊、nono、℡低头、想念!、悟空家的饭、only oneZJ。在这里需要特别感谢下nono,其一他帮忙管理群,其二这次svip的升级也是他发起和组织的,再次对nono表示真诚的感谢,在此把这篇文章【Spring Bootshiro无状态】献给nono

       好了下面就进入正题,看下本节的大纲:

 
(1)Shiro基本知识回忆;
(2)Shiro无状态整体分析;
(3)新建Maven工程;
(4)配置pom.xml文件;
(5)编写HelloController;
(6)编写启动类App;

 

 

       接下来我们一起看看具体的步骤:

1Shiro基本知识回忆

详情可以查看【Spring Boot Shiro权限管理】地址:http://412887952-qq-com.iteye.com/blog/2299732

       在这里我们把重要的东西先回顾下,因为在之后的讲解中我们需要用到,详情的话,看之前介绍的文章,这里不重复介绍。

       要想集成Shiro的话,我们需要知道Shiro框架的几个核心的管理对象。

第一:ShiroFilterFactoryShiro过滤器工厂类,具体的实现类是:ShiroFilterFactoryBean,此实现类是依赖于SecurityManager安全管理器的。

第二:SecurityManagerShiro的安全管理器,主要是身份认证的管理,缓存管理,Cookie管理,所以在时机开发中主要是和SecurityManager进行打交道的,ShiroFilterFacotory只要配置好Filter就可以了。

第三:AccessControlFilter:访问控制过滤器,对请求进行拦截处理,在这里我们可以进行一些基本的判断以及数据的基本处理,然后生成一个AuthenticationToken,然后委托给Realm进行身份的验证和权限的验证。

第四:Ream:用于身份信息权限的验证。

 

2Shiro无状态整体分析

我们先看下最终要实现的结果,访问如下地址:

http://127.0.0.1:8080/hello?username=admin&params1=love&params2=girl&digest=df7f1595bd5682638556072c8ccde5edadcd807a829373d21af38fb1bc707da7

如果digest是正确的话,那么就会返回Hello,Andy,否则会login,error

       用户访问url,进入到后台,然后会进入到我们编写的AccessControlFilter,进行访问控制过滤拦截,如果不满足条件的话,那么直接就返回了,否则接着往下处理。在AccessControlFilter中我们为委托AuthorizingRealm进行身份的认证。在AuthorizingRealm中的身份验证访问进行客户端消息摘要和服务器端消息摘要的匹配。如果成功的话,那么就会到Shiro进行进一步的处理,最后到我们的Controller,然后进行返回。经过这个流程的分析,那么我们需要以下几个对象才能完成我们的需求:

第一需要ShiroConfiguration:在这个类中主要是注入shirofilterFactoryBeansecurityManager等对象。

第二需要StatelessAccessControlFilter:这个类中实现访问控制过滤,当我们访问url的时候,这个类中的两个方法会进行拦截处理。

第三需要StatelessAuthorizingRealm:这个类中主要是身份认证,验证信息是否合理,是否有角色和权限信息。

第四需要StatelessAuthenticationToken:在shiro中有一个我们常用的UsernamePasswordToken,因为我们需要这里需要自定义一些属性值,比如:消息摘要,参数Map

第五需要StatelessDefaultSubjectFactory:由于我们编写的是无状态的,每人情况是会创建session对象的,那么我们需要修改createSubject关闭session的创建。

第六需要HmacSHA256UtilsJava 加密解密之消息摘要算法,对我们的参数信息进行处理。

       以上就是基本这篇文章用到的几个核心的类,我们看看具体的步骤。

 

3)新建Maven工程

       新建一个maven工程,取名为:spring-boot-shiro-stateless

 

4)配置pom.xml文件

       在这里主要需要依赖于:

第一spring boot : 父节点依赖;

第二shiro-spring : spring 继承shiro的依赖;

第三commons-codec:用到org.apache.commons.codec.binary.Hex;

具体pom.xml文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

 

  <groupId>com.kfit</groupId>

  <artifactId>spring-boot-shiro-stateless</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>jar</packaging>

 

  <name>spring-boot-shiro-stateless</name>

  <url>http://maven.apache.org</url>

 

  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <java.version>1.8</java.version>

  </properties>

 

 

    <!--

       spring boot 父节点依赖,

       引入这个之后相关的引入就不需要添加version配置,

       spring boot会自动选择最合适的版本进行添加。

     -->

    <parent>

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-parent</artifactId>

       <version>1.4.1.RELEASE</version>

    </parent> 

   

 

 

  <dependencies>

   

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <scope>test</scope>

    </dependency>

   

     <!-- spring boot web支持:mvc,aop... -->

    <dependency>

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

   

    <!-- shiro spring. -->

    <dependency>

       <groupId>org.apache.shiro</groupId>

       <artifactId>shiro-spring</artifactId>

       <version>1.2.2</version>

    </dependency>

   

    <dependency>

            <groupId>commons-codec</groupId>

            <artifactId>commons-codec</artifactId>

      </dependency>

   

  </dependencies>

</project>

 

5)编写HelloController

       编写一个Rest测试类,简单测试下:

package com.kfit.controller;

 

import javax.servlet.http.HttpSession;

 

import org.apache.shiro.SecurityUtils;

import org.apache.shiro.authz.annotation.RequiresRoles;

import org.apache.shiro.session.Session;

import org.apache.shiro.subject.Subject;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

 

@RestController

public class HelloController {

   

    @RequestMapping("/hello")

   

    public String hello(String params1,String params2){

       return "hello,Andy,params1="+params1+",params1="+params2;

    }

}

 

6)编写启动类App;

       编写Spring Boot启动类:

package com.kfit;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

 

/**

 *

 * @author Angel --守护天使

 * @version v.0.1

 * @date 2017225

 */

@SpringBootApplication

public class App {

    public static void main(String[] args) {

       SpringApplication.run(App.class, args);

    }

}

       这时候我们先启动看下效果:http://127.0.0.1:8080/hello ,正常的情况下,浏览器中会返回:

hello,Andy,params1=null,params1=null

 

       哈哈,说明至少到这里,我们的代码是没有问题,当然最难的部分还没开始呢,下面才是难点呢,下面部分比较复杂,单独写篇博客进行讲解。今天就先到这里吧,下篇博客见。

 

 

 

【视频&交流平台】

à Spring Boot实战篇之Shiro

http://study.163.com/course/introduction.htm?courseId=1004523002

 

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

 ======================================

Spring Boot Shiro视频实战篇【已更新】

======================================

 

适合人群

有Spring Boot基础的人群。

 

使用技术

(1)spring boot(整合框架)

(2)spring mvc

(3)spring data jpa(持久化操作)

(4)shiro(安全框架)

(5)thymeleaf(模板引擎)

(6)ehcache(缓存管理)

(7)mysql(数据库)

(8)js/css/img(静态资源使用)

9kaptcha(验证码库)

 

课程目录

1. Spring Boot Shiro介绍

 

2. Spring Boot 搭建无Shiro的框架

 

3. Spring Boot Shiro拦截

 

4. Spring Boot Shiro身份认证准备工作

 

5. Spring Boot Shiro身份认证

 

6. Spring Boot Shiro权限控制

 

7. Spring Boot Shiro缓存

 

8. Spring Boot Shiro记住密码

 

9. Spring Boot Shiro登录成功之后下载favicon.ico

 

10. Spring Boot 在thymeleaf使用shiro标签

 

11. Spring Boot Shiro密码加密算法

 

12.Spring Boot Shiro使用JS-CSS-IMG

 

13. Spring Boot Shiro限制登录尝试次数

 

14.Spring Boot Shiro 验证码

 

 

分享到:
评论

相关推荐

    39.1 Spring Boot Shiro权限管理【从零开始学Spring Boot】

    在本教程中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发而闻名,而Shiro则是一个轻量级的安全框架,适用于身份验证、授权、会话管理和安全性相关的...

    39.4 Spring Boot Shiro权限管理【从零开始学Spring Boot】

    在本教程中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发能力而备受青睐,而Shiro则是一个轻量级的安全框架,用于实现用户认证、授权和会话管理。...

    spring boot+shiro 权限认证管理案例

    4. `shiro.ini` 或 `shiro.yml`:Shiro 的配置文件,定义了过滤器链和 Realm 设置。 5. `WebSecurityInitializer.java`:初始化 Shiro 过滤器链的配置。 通过以上步骤,我们可以构建一个集成了 Spring Boot 和 ...

    从零开始学Spring Boot与Shiro教程

    在学习过程中,提供的《从零开始学Spring Boot》PDF电子书会详细介绍Spring Boot的各个组件和使用方式,包括自动配置、起步依赖、Actuator监控、外部配置、测试等方面。而《Shiro教程》则会详细阐述Shiro的各个方面...

    spring boot 集成 shiro

    **Spring Boot 集成 Shiro 深度解析** Spring Boot 是一款基于 Spring 的轻量级框架,它简化了 Spring 应用的初始搭建以及开发过程。而 Apache Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和...

    39.2. Spring Boot Shiro权限管理【从零开始学Spring Boot】

    在本教程中,我们将深入探讨如何使用Spring Boot和Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发能力而闻名,而Shiro则是一个强大的安全管理框架,提供了认证、授权、会话管理和安全加密等...

    spring_boot_shiro

    《Spring Boot整合Shiro实战详解》 在现代Java Web开发中,Spring Boot以其简洁的配置、快速的开发体验,已经成为主流框架。而Apache Shiro作为一款强大的安全管理框架,提供了认证、授权、会话管理和安全加密等...

    Spring Boot整合Shiro搭建权限管理系统

    在本文中,我们将探讨如何利用Spring Boot和Apache Shiro构建一个权限管理系统。Spring Boot以其便捷的启动和配置方式,使得快速开发变得简单。而Shiro则是一个轻量级的安全框架,用于实现用户认证和授权。 首先,...

    基于Spring Boot和Shiro框架的权限管理系统.zip

    基于Spring Boot和Shiro框架的权限管理系统 项目简介 本项目是一个基于Spring Boot和Shiro框架的权限管理系统,结合Vue.js实现前后端分离。系统支持按钮接口级别的权限控制,确保用户只能访问其权限范围内的资源。...

    Spring Boot学习之Shiro源码

    Spring Boot学习之Shiro源码【学习狂神说,自己手动书写,可以实现正常所需的功能】 Spring Boot学习之Shiro源码【学习狂神说,自己手动书写,可以实现正常所需的功能】 Spring Boot学习之Shiro源码【学习狂神说,...

    spring boot shiro demo项目

    Spring Boot Shiro Demo项目是一个基于Spring Boot框架与Apache Shiro实现的权限管理示例,旨在帮助开发者快速理解和应用Shiro进行权限控制。相比Spring Security,Shiro通常被认为更易于理解和使用,更适合小型到...

    Spring Boot整合Shiro搭建权限管理系统教学提纲.pdf

    【Spring Boot整合Shiro搭建权限管理系统】 在Java后端开发中,Spring Boot因其简洁的配置和强大的功能,已经成为构建Web应用的首选框架。而Apache Shiro则是一个强大且易用的Java安全框架,用于处理认证、授权、...

    楠哥Spring Boot整合Shiro.zip

    1. **引入依赖**:在Spring Boot项目中,我们可以通过添加Shiro的Maven或Gradle依赖来引入所需库。例如,在Maven的pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;org.apache.shiro &lt;artifactId&gt;shiro-spring ...

    Spring Boot整合Shiro.zip

    在现代Web开发中,Spring Boot和Apache Shiro是两个非常重要的框架。Spring Boot以其便捷的配置和快速的应用启动而受到广大开发者的喜爱,而Apache Shiro则是一个强大的安全管理框架,负责处理认证、授权、会话管理...

    Spring Boot整合Shiro搭建权限管理系统 (2).pdf

    首先,让我们从创建一个 Spring Boot 项目开始: 1. 创建 Maven 工程: 使用 Maven 作为构建工具是标准做法,因为它提供了依赖管理和构建自动化功能。新建一个 Maven 项目,并在 `pom.xml` 文件中引入 Spring Boot...

    从零开始学Spring Boot

    1.3 spring boot起步之Hello World 1.4 Spring Boot返回json数据 1.5 Spring Boot热部署 1.6 Spring Boot使用别的json解析框架 1.7 全局异常捕捉 1.8 Spring Boot datasource - mysql 1.9 JPA - Hibernate 1.10 使用...

    Spring Boot整合Shiro搭建权限管理系统教学提纲.docx

    ### Spring Boot整合Shiro搭建权限管理系统知识点解析 #### 一、Spring Boot与Shiro简介 - **Spring Boot**: 是一种简化Spring应用开发的框架,它提供了自动配置、依赖管理等功能,使得开发者能够快速构建独立的...

    Spring Boot 整合 Shiro.docx

    整合Spring Boot与Shiro,首先需要在项目中引入Shiro的相关依赖。在`pom.xml`文件中添加Spring Boot对Shiro的支持,然后配置SecurityManager,并实现自己的Realm以处理认证和授权逻辑。接下来,可以编写过滤器链来...

    39.3 Spring Boot Shiro权限管理【从零开始学Spring Boot】

    在本主题中,我们将深入探讨如何使用Spring Boot与Apache Shiro进行权限管理。Spring Boot以其简洁的配置和快速的应用开发特性,已经成为了Java领域中的热门框架。而Shiro则是一款强大的安全框架,提供了身份验证、...

    Spring Boot整合Shiro搭建权限管理系统.docx

    在开始介绍如何使用Spring Boot整合Shiro搭建权限管理系统之前,我们首先简要回顾一下Spring Boot的基础知识。 ##### 1. 新建一个Maven工程 为了创建一个Spring Boot项目,首先需要使用Maven或者Gradle作为构建...

Global site tag (gtag.js) - Google Analytics