广告
返回顶部
首页 > 资讯 > 精选 >怎么用Springboot快速整合shiro安全框架
  • 813
分享到

怎么用Springboot快速整合shiro安全框架

2023-07-05 20:07:05 813人浏览 独家记忆
摘要

这篇文章主要介绍“怎么用SpringBoot快速整合shiro安全框架”,在日常操作中,相信很多人在怎么用springboot快速整合shiro安全框架问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Sp

这篇文章主要介绍“怎么用SpringBoot快速整合shiro安全框架”,在日常操作中,相信很多人在怎么用springboot快速整合shiro安全框架问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Springboot快速整合shiro安全框架”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

咱们先来普及一下什么是shiro,shiro原名Apache Shiro 是一个Java 的安全(权限)框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以完成,认证,授权,加密,会话管理,WEB集成,缓存等高级应用。如图看shiro的功能和架构图:

怎么用Springboot快速整合shiro安全框架

怎么用Springboot快速整合shiro安全框架

话不多说,Springboot整合shiro,咱们直接上代码

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?><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 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.6.11</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.example</groupId>    <artifactId>demo02</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>demo02</name>    <description>demo02</description>    <properties>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.apache.shiro</groupId>            <artifactId>shiro-spring</artifactId>            <version>1.4.1</version>        </dependency>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>2.1.0</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>Mysql-connector-java</artifactId>           <version>8.0.31</version>        </dependency>        <!-- https://mvnrepository.com/artifact/log4j/log4j -->        <dependency>            <groupId>log4j</groupId>            <artifactId>log4j</artifactId>            <version>1.2.17</version>        </dependency>        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.1.12</version>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>         <artifactId>lombok</artifactId>           <version>1.18.18</version>            <scope>compile</scope>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-thymeleaf</artifactId>        </dependency>        <dependency>            <groupId>org.thymeleaf</groupId>            <artifactId>thymeleaf</artifactId>        </dependency>        <dependency>            <groupId>org.thymeleaf.extras</groupId>            <artifactId>thymeleaf-extras-java8time</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>com.GitHub.theborakompaNIOni</groupId>            <artifactId>thymeleaf-extras-shiro</artifactId>            <version>2.0.0</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>3.8.1</version>                <configuration>                    <source>1.8</source>                    <target>1.8</target>                    <encoding>UTF-8</encoding>                </configuration>            </plugin>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

然后我们建立一个数据库 

SET FOREIGN_KEY_CHECKS=0;

&ndash; Table structure for user

DROP TABLE IF EXISTS user;
CREATE TABLE user (
id int NOT NULL AUTO_INCREMENT,
name varchar(255) DEFAULT NULL,
pwd varchar(255) DEFAULT NULL,
perms varchar(100) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

&ndash; Records of user

INSERT INTO user VALUES (&lsquo;1&rsquo;, &lsquo;qin&rsquo;, &lsquo;d1b129656359e35e95ebd56a63D7b9e0&rsquo;, &lsquo;user:add&rsquo;);
INSERT INTO user VALUES (&lsquo;2&rsquo;, &lsquo;hai&rsquo;, &lsquo;123&rsquo;, &lsquo;user:insert&rsquo;);
INSERT INTO user VALUES (&lsquo;3&rsquo;, &lsquo;root&rsquo;, &lsquo;d1b129656359e35e95ebd56a63d7b9e0&rsquo;, &lsquo;user:update&rsquo;);

application.yml文件

spring:   datasource:      username: xxxx      passWord: xxxxxxxxxxxx      url: jdbc:mysql://localhost:3306/mybatis      driver-class-name: com.mysql.cj.jdbc.Driver      type: com.alibaba.druid.pool.DruidDataSourcemybatis:   mapper-locations: classpath:mapper */        //进行一个拦截    Map<String,String> filterMap = new LinkedHashMap<String, String>();//    filterMap.put("/user/add","authc");//    filterMap.put("/user/update","authc");        //授权//        filterMap.put("/user/add","perms[user:add]"); //大家记得注意顺序!        filterMap.put("/user/add","perms[user:add]");        filterMap.put("/user/update","perms[user:update]");        filterMap.put("/user/*","authc");        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);    shiroFilterFactoryBean.setLoginUrl("/toLogin");    //未授权页面        shiroFilterFactoryBean.setUnauthorizedUrl("/noauth");        return shiroFilterFactoryBean;}    //创建 DefaultWebSecurityManager    @Bean(name = "securityManager")    public DefaultWebSecurityManager    getDefaultWebSecurityManager(@Qualifier("userRealm")UserRealm userRealm){        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();        //2创建加密对象,设置相关属性        HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();        //2.1采用md5加密        matcher.setHashAlGorithmName("md5");        //2.2迭代加密次数        matcher.setHashIterations(3);        //3将加密对象存储到myRealm中        userRealm.setCredentialsMatcher(matcher);//关联Realm        securityManager.setRealm(userRealm);        return securityManager;    }    //创建 realm 对象    @Bean    public UserRealm userRealm(){        return new UserRealm();    }    //配置ShiroDialect:方言,用于 thymeleaf 和 shiro 标签配合使用    @Bean    public ShiroDialect getShiroDialect(){        return new ShiroDialect();    }}

UserRealm

package com.example.demo02.config;import com.example.demo02.pojo.User;import com.example.demo02.service.UserService;import org.apache.shiro.SecurityUtils;import org.apache.shiro.authc.*;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.authz.SimpleAuthorizationInfo;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;import org.apache.shiro.subject.Subject;import org.apache.shiro.util.ByteSource;import org.springframework.beans.factory.annotation.Autowired;import java.util.List;//自定义得UserRaelmpublic class UserRealm extends AuthorizingRealm {    @Autowired    UserService userService;    //授权    @Override    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {        System.out.println("执行了=》授权doGetAuthorizationInfo");        SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();//        info.addStringPermission("user:update");        info.addStringPermission("user:add");        //拿到当前用户登陆对象        Subject subject= SecurityUtils.getSubject();        User currentUser= (User) subject.getPrincipal();//拿到User对象         info.addStringPermission(currentUser.getPerms());//设置当前用户对象        return info;    }    //执行认证逻辑    @Override    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {        System.out.println("执行了=>认证逻辑AuthenticationToken");//假设数据库的用户名和密码//        String name = "root";//        String password = "123456";//1.判断用户名        UsernamePasswordToken userToken = (UsernamePasswordToken)token;       //连接真实的数据库        User user= userService.queryUserByName(userToken.getUsername());//        if(user==null){            return  null;        }        Subject subject = SecurityUtils.getSubject();        subject.getSession().setAttribute("loginUser",user);//2. 验证密码,我们可以使用一个AuthenticationInfo实现类SimpleAuthenticationInfo// shiro会自动帮我们验证!重点是第二个参数就是要验证的密码!        return new SimpleAuthenticationInfo(user, user.getPwd(),ByteSource.Util.bytes("salt"),"");//        if(user !=null){//            AuthenticationInfo info = new SimpleAuthenticationInfo(//                    token.getPrincipal(),//                    user.getPwd(),//                    ByteSource.Util.bytes("salt"),//                    token.getPrincipal().toString()//            );//            return info;//        }//        return null;    }}

service层
先是类UserServiceImpl

package com.example.demo02.service;import com.example.demo02.mapper.UserMapper;import com.example.demo02.pojo.User;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class UserServiceImpl implements UserService {    @Autowired    UserMapper userMapper;    @Override    public User queryUserByName(String name) {        return userMapper.queryUserByName(name);    }}

再是接口UserService

package com.example.demo02.service;import com.example.demo02.pojo.User;public interface UserService {    public User queryUserByName(String name);}

mapper层
接口Usermapper

package com.example.demo02.mapper;import com.example.demo02.pojo.User;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import org.springframework.stereotype.Repository;@Repository//@Mapperpublic interface UserMapper {    @Select("select * from user where name=#{name}")    public User queryUserByName(@Param("name") String name);}

再就是前端resources里面的static和templates

后端实现鉴权图

怎么用Springboot快速整合shiro安全框架

存入数据库的数据为加密文件

怎么用Springboot快速整合shiro安全框架

到此,关于“怎么用Springboot快速整合shiro安全框架”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么用Springboot快速整合shiro安全框架

本文链接: https://www.lsjlt.com/news/355214.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Springboot快速整合shiro安全框架
    这篇文章主要介绍“怎么用Springboot快速整合shiro安全框架”,在日常操作中,相信很多人在怎么用Springboot快速整合shiro安全框架问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Sp...
    99+
    2023-07-05
  • 如何用Springboot快速整合shiro安全框架
    咱们先来普及一下什么是shiro,shiro原名Apache Shiro 是一个Java 的安全(权限)框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE...
    99+
    2023-05-14
    Java Springboot整合shiro安全框架 Springboot整合shiro安全框架 快速整合shiro框架
  • Java安全框架——Shiro的使用详解(附springboot整合Shiro的demo)
    目录Shiro简介 Shiro快速入门 SpringBoot-Shiro整合(最后会附上完整代码) 附上最后的完整代码 Shiro整合mybatis 认证搞完了,我们再来看看授权 S...
    99+
    2022-11-12
  • Java springboot整合Shiro框架的方法是什么
    本篇内容主要讲解“Java springboot整合Shiro框架的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java springboot整合Shiro框架的...
    99+
    2023-06-26
  • SpringBoot整合Shiro框架,实现用户权限管理
    目录一、Shiro简介 核心角色核心理念 二、整合SpringBoot2框架  1、核心依赖2、Shiro核心配置3、域对象配置4、核心工具类5、自定义权限异常提...
    99+
    2022-11-12
  • Java Apache Shiro安全框架快速开发详解流程
    目录一、Shiro简介:shiro功能:Shiro架构(外部)Shiro架构(内部)二、快速入门1.拷贝案例2.分析代码三、SpringBoot 集成 Shiro1.编写测试环境2....
    99+
    2022-11-12
  • SpringBoot怎么快速整合SpringSecurity
    这篇文章主要介绍了SpringBoot怎么快速整合SpringSecurity的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么快速整合SpringSecurity文章都会有所收获,下面我们...
    99+
    2023-07-05
  • 安全框架Shiro怎么配置
    这篇文章主要介绍“安全框架Shiro怎么配置”,在日常操作中,相信很多人在安全框架Shiro怎么配置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”安全框架Shiro怎么配置”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-26
  • Java SpringBoot安全框架整合Spring Security详解
    目录1.工业级安全框架介绍2.建议搭建Spring Security环境2.1在pom.xml中添加相关依赖2.2创建Handler类2.3创建简单的html和配置相关thymele...
    99+
    2022-11-12
  • Springboot安全框架整合SpringSecurity实现方式
    1.工业级安全框架介绍 Spring Security基于Spring开发,项目中如果使用Spring作为基础,配合Spring Security做权限更加方便,而Shiro需要和S...
    99+
    2022-11-12
  • SpringBoot怎么整合JPA框架
    这篇文章主要介绍了SpringBoot怎么整合JPA框架的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么整合JPA框架文章都会有所收获,下面我们一起来看看吧。一. Spring Boot数...
    99+
    2023-07-04
  • Java中Apache Shiro安全框架怎么用
    这篇文章将为大家详细讲解有关Java中Apache Shiro安全框架怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、Shiro简介:Apache Shiro是一个Java的安全(权限)框架。Sh...
    99+
    2023-06-25
  • SpringBoot整合Security安全框架实现控制权限
    目录一、前言介绍:官网:优缺点:案例:二、环境准备2.1、数据库表2.2、导入依赖2.3、配置文件2.4、WebSecurityConfig Security的主要配置类:2.5、S...
    99+
    2022-11-12
  • 怎么在springboot中整合jquery和bootstrap框架
    这篇文章主要介绍了怎么在springboot中整合jquery和bootstrap框架的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么在springboot中整合jquery和bootstrap框架文章都会有...
    99+
    2023-06-17
  • SpringBoot2 整合SpringSecurity框架是怎么实现用户权限安全管理
    这篇文章给大家介绍SpringBoot2 整合SpringSecurity框架是怎么实现用户权限安全管理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、Security简介1、基础概念Spring Security是...
    99+
    2023-06-05
  • web开发安全框架中的Apache Shiro的应用是怎样的
    今天给大家介绍一下web开发安全框架中的Apache Shiro的应用是怎样的。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。web开发安全框架中的Apache...
    99+
    2023-06-02
  • 怎么用Resty restful框架快速接入Spring
    这篇文章主要介绍“怎么用Resty restful框架快速接入Spring”,在日常操作中,相信很多人在怎么用Resty restful框架快速接入Spring问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎...
    99+
    2023-06-29
  • SpringBoot2 高级应用(12):整合 SpringSecurity 框架,实现用户权限安全管理
    本文源码:GitHub·点这里 || GitEE·点这里一、Security简介1、基础概念Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring...
    99+
    2023-06-02
  • C#中怎么使用Cache框架快速实现Cache操作
    这篇“C#中怎么使用Cache框架快速实现Cache操作”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#中怎么使用Cach...
    99+
    2023-07-02
  • 怎么使用web Foundation框架快速创建跨平台的网站页面原型
    这篇文章主要介绍“怎么使用web Foundation框架快速创建跨平台的网站页面原型”,在日常操作中,相信很多人在怎么使用web Foundation框架快速创建跨平台的网站页面原型问题上存在疑惑,小编查...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作