springboot整合shiro排雷

简介: Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

springboot整合shior初体验


什么是shiro?


Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。


1.JPG

他有三个核心组件:Subject, SecurityManager 和 Realms. Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。 SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。 Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。

2.JPG


快速开始


  • 引入maven坐标
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring -->
<!--shiro整合spring的包-->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.5.3</version>
</dependency>
复制代码


  • 编写config文件
package com.config;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
//shiro的配置类
@Configuration
public class ShiroConfig {
    //第三步:ShiroFilterFactoryBean(看源码需要传入哪些值)
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultSecurityManager defaultSecurityManager){
        ShiroFilterFactoryBean  shiroFilterFactoryBean =new ShiroFilterFactoryBean();
        //设置安全管理器
        shiroFilterFactoryBean.setSecurityManager(defaultSecurityManager);
        //添加shiro的内置过滤器
           /* anno: 无需认证就可以访问
              authc:必须认证了才可以访问
              user: 必须拥有记住我功能才可以用
              perms:拥有对某个资源的权限才可以访问
              role:拥有某个角色权限才可以访问
           * */
        Map<String,String> filterMap =new HashMap<String, String>();
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
        filterMap.put("/user/add","authc");//只有认证了才可以访问/user/add页面
        filterMap.put("/user/update","authc");
        return shiroFilterFactoryBean;
    }
    //第二步获取DafaultWebSecurityManager
    @Bean(name = "securityManager")//不用默认的方法名充当名字,自己设置一个
    public DefaultSecurityManager getWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){//绑定userRealm
        DefaultWebSecurityManager webSecurityManager =new DefaultWebSecurityManager();
        //关联userRealm
        webSecurityManager.setRealm(userRealm);
        return webSecurityManager;
    }
    //第一步,创建realm对象,需要自定义
    @Bean
    public UserRealm userRealm(){
        return new UserRealm();
    }//自定义的UserRealm类被spring托管
}
复制代码


  • 创建测试html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>首页</h1>
    <hr>
    <a th:href="@{/user/add}">add</a>
    <a th:href="@{/user/update}">update</a>
</body>
</html>
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
        add
</body>
</html>
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    update
</body>
</html>
复制代码


开始测试


登陆界面:


3.JPG


点击图中的add按钮:

4.JPG


点击图中的update按钮:

5.JPG


均为没有权限,无法访问网站


改进思路


如果没有权限,应该跳转到登陆页面,而不是直接报404错误,所以需要添加登录页和修改部分代码


添加登录页


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>登陆</h1>
    <hr>
    <form action="/login">
        <p>账号:<input type="text" name="usermame"></p>
        <p>密码:<input type="text" name="password"></p>
        <input type="submit" value="登陆">
    </form>
</body>
</html>
复制代码


修改Controller


添加了登陆的方法


package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ShiroController {
    @RequestMapping({"/","/index"})
    public String toindex(){
        return "index";
    }
    @RequestMapping({"/user/add"})
    public String add(){
        return "user/add";
    }
    @RequestMapping({"/user/update"})
    public String update(){
        return "user/update";
    }
    @RequestMapping({"/login"})
    public String login(){
        return "user/login";
    }
}
复制代码


修改config文件


添加setLoginUrl方法


package com.config;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
//shiro的配置类
@Configuration
public class ShiroConfig {
    //第三步:ShiroFilterFactoryBean(看源码需要传入哪些值)
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultSecurityManager defaultSecurityManager){
        ShiroFilterFactoryBean  shiroFilterFactoryBean =new ShiroFilterFactoryBean();
        //设置安全管理器
        shiroFilterFactoryBean.setSecurityManager(defaultSecurityManager);
        //添加shiro的内置过滤器
           /* anno: 无需认证就可以访问
              authc:必须认证了才可以访问
              user: 必须拥有记住我功能才可以用
              perms:拥有对某个资源的权限才可以访问
              role:拥有某个角色权限才可以访问
           * */
        Map<String,String> filterMap =new HashMap<String, String>();
        filterMap.put("/user/add","authc");//只有认证了才可以访问/user/add页面
        filterMap.put("/user/update","authc");
        //filterMap.put("/user/*","authc"); 支持通配符写法
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
        shiroFilterFactoryBean.setLoginUrl("/login");//设置登陆请求
        return shiroFilterFactoryBean;
    }
    //第二步获取DafaultWebSecurityManager
    @Bean(name = "securityManager")//不用默认的方法名充当名字,自己设置一个
    public DefaultSecurityManager getWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){//绑定userRealm
        DefaultWebSecurityManager webSecurityManager =new DefaultWebSecurityManager();
        //关联userRealm
        webSecurityManager.setRealm(userRealm);
        return webSecurityManager;
    }
    //第一步,创建realm对象,需要自定义
    @Bean
    public UserRealm userRealm(){
        return new UserRealm();
    }//自定义的UserRealm类被spring托管
}
复制代码


再次测试


6.JPG


点击add(update)

7.JPG


okk!!第一次使用springboot整合shiro结束了,接下来我会继续学习!



相关文章
|
5月前
|
缓存 安全 Java
Shiro框架以及Spring Boot整合Shiro
Shiro框架以及Spring Boot整合Shiro
Shiro框架以及Spring Boot整合Shiro
|
23天前
|
安全 Java Apache
SpringBoot+Shiro(一)
SpringBoot+Shiro(一)
|
8天前
|
Java API Apache
Springboot+shiro,完整教程,带你学会shiro
这篇文章提供了一个完整的Apache Shiro与Spring Boot结合使用的教程,包括Shiro的配置、使用以及在非Web和Web环境中进行身份验证和授权的示例。
24 2
Springboot+shiro,完整教程,带你学会shiro
|
8天前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
102 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
SQL Java 数据库连接
springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、
这篇文章介绍了在Spring Boot + MyBatis + Shiro项目中,如何使用Shiro框架实现登录用户的权限验证,包括用户、角色和权限表的设计,以及通过多个表查询来收集和验证用户权限的方法和代码实现。
springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、
|
2月前
|
SQL 前端开发 Java
springboot项目中使用shiro实现用户登录以及权限的验证
这篇文章详细介绍了如何在Spring Boot项目中集成Apache Shiro框架来实现用户登录和权限验证,包括项目依赖配置、数据库连接、实体类定义、控制器、服务层、Mapper层以及前端页面的实现,并展示了实际效果和过滤器代码。
springboot项目中使用shiro实现用户登录以及权限的验证
|
2月前
|
NoSQL 安全 Java
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
|
2月前
|
安全 Java 数据库
Spring Boot中集成 Shiro
本节主要介绍了 Shiro 安全框架与 Spring Boot 的整合。先介绍了 Shiro 的三大核心组件已经它们的作用;然后介绍了 Shiro 的身份认证、角色认证和权限认证;最后结合代码,详细介绍了 Spring Boot 中是如何整合 Shiro 的,并设计了一套测试流程,逐步分析 Shiro 的工作流程和原理,让读者更直观地体会出 Shiro 的整套工作流程。Shiro 使用的很广泛,希望读者将其掌握,并能运用到实际项目中。
|
3月前
|
安全 Java Apache
如何安装与使用Spring Boot 2.2.x、Spring Framework 5.2.x与Apache Shiro 1.7进行高效开发
【7月更文第1天】在现代Java Web开发领域,Spring Boot以其简化配置、快速开发的特点备受青睐。结合Spring Framework的成熟与Apache Shiro的强大权限控制能力,我们可以轻松构建安全且高效的Web应用。本篇文章将指导你如何安装并使用Spring Boot 2.2.x、Spring Framework 5.2.x以及Apache Shiro 1.7来构建一个具备基础权限管理功能的项目。
69 0
|
4月前
|
NoSQL 安全 Linux
springboot+shiro+redis前后端分离实现认证(一)
springboot+shiro+redis前后端分离实现认证(一)
146 0