SpringBoot中Shiro使用身份认证配置

SpringBoot整合Shiro Shiro是一个开源的Java安全框架,它提供了身份认证、授权、加密和会话管理等功能,可以帮助我们快速地构建安全可靠的应用程序。 阅读详情
  1. 配置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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.xayuli</groupId>
        <artifactId>nettels</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <name>nettels</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <!--<dependency>-->
                <!--<groupId>mysql</groupId>-->
                <!--<artifactId>mysql-connector-java</artifactId>-->
            <!--</dependency>-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <!--<exclusions>-->
                    <!--<exclusion>-->
                        <!--<groupId>org.springframework.boot</groupId>-->
                        <!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
                    <!--</exclusion>-->
                <!--</exclusions>-->
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-spring</artifactId>
                <version>1.4.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <dependency>
                <groupId>com.microsoft.sqlserver</groupId>
                <artifactId>sqljdbc4</artifactId>
                <version>4.0</version>
                <!--<scope>test</scope>-->
            </dependency>
            <!--声明spring boot内嵌tomcat的作用范围  在运行时不起作用-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
            <finalName>nettels</finalName>
        </build>
    
    
    
        <repositories>
            <repository>
                <id>spring-snapshots</id>
                <name>Spring Snapshots</name>
                <url>https://repo.spring.io/snapshot</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>spring-milestones</id>
                <name>Spring Milestones</name>
                <url>https://repo.spring.io/milestone</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
    
        <pluginRepositories>
            <pluginRepository>
                <id>spring-snapshots</id>
                <name>Spring Snapshots</name>
                <url>https://repo.spring.io/snapshot</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </pluginRepository>
            <pluginRepository>
                <id>spring-milestones</id>
                <name>Spring Milestones</name>
                <url>https://repo.spring.io/milestone</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
    
    
    </project>
    
  2. ShiroConfig
    package com.xayuli.nettels.controller;
    
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
    import org.apache.shiro.mgt.SecurityManager;
    import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
    import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class ShiroConfig {
        @Bean
        public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager){
            System.out.println("ShiroConfiguration.shirFilter()");
            ShiroFilterFactoryBean shiroFilterFactoryBean  = new ShiroFilterFactoryBean();
            System.out.println("设置拦截器--->");
            // 必须设置 SecurityManager
            shiroFilterFactoryBean.setSecurityManager(securityManager);
    
            //拦截器.
            Map<String,String> filterChainDefinitionMap = new LinkedHashMap<String,String>();
    
            //配置退出过滤器,其中的具体的退出代码Shiro已经替我们实现了
            filterChainDefinitionMap.put("/logout", "logout");
            filterChainDefinitionMap.put("/userLogin", "anon");//开放login方法
            filterChainDefinitionMap.put("/templates/css/**", "anon");//设置不拦截
            filterChainDefinitionMap.put("/templates/js/**", "anon");//设置不拦截
            filterChainDefinitionMap.put("/templates/images/**", "anon");//设置不拦截
            //<!-- 过滤链定义,从上向下顺序执行,一般将 /**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了;
            //<!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
            filterChainDefinitionMap.put("/**", "authc");
    
            // 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
            shiroFilterFactoryBean.setLoginUrl("/index");
            // 登录成功后要跳转的链接
            shiroFilterFactoryBean.setSuccessUrl("/success");
            //未授权界面;
            shiroFilterFactoryBean.setUnauthorizedUrl("/403");
    
            shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
            return shiroFilterFactoryBean;
        }
    
        /**
         * 自己写的
         * @return
         */
        @Bean
        public MyShiroRealm myShiroRealm(){
            MyShiroRealm myShiroRealm = new MyShiroRealm();
            myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
            return myShiroRealm;
        }
    
        /**
         * 注入
         * @return
         */
        @Bean
        public SecurityManager securityManager(){
            DefaultWebSecurityManager securityManager =  new DefaultWebSecurityManager();
            securityManager.setRealm(myShiroRealm());
            System.out.println("注入我的shiro");
            return securityManager;
        }
    
        /**
         * 凭证匹配器
         * (由于我们的密码校验交给Shiro的SimpleAuthenticationInfo进行处理了
         *  所以我们需要修改下doGetAuthenticationInfo中的代码;
         * )
         * @return
         */
        @Bean
        public HashedCredentialsMatcher hashedCredentialsMatcher(){
            HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
            System.out.println("(⊙_⊙)设置MD5加密");
            hashedCredentialsMatcher.setHashAlgorithmName("md5");//散列算法:这里使用MD5算法;
            hashedCredentialsMatcher.setHashIterations(1);//散列的次数,比如散列两次,相当于 md5(md5(""));
    
            return hashedCredentialsMatcher;
        }
    
    
    }
    

     

  3. MyShiroRealm
    package com.xayuli.nettels.controller;
    
    import com.xayuli.nettels.pojo.TSUser;
    import com.xayuli.nettels.service.UserService;
    import org.apache.shiro.authc.AuthenticationException;
    import org.apache.shiro.authc.AuthenticationInfo;
    import org.apache.shiro.authc.AuthenticationToken;
    import org.apache.shiro.authc.SimpleAuthenticationInfo;
    import org.apache.shiro.authz.AuthorizationInfo;
    import org.apache.shiro.realm.AuthorizingRealm;
    import org.apache.shiro.subject.PrincipalCollection;
    
    import javax.annotation.Resource;
    
    public class MyShiroRealm extends AuthorizingRealm {
    
        @Resource
        private UserService userService;
    
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
            System.out.println("进行了权限认证!!!");
            return null;
        }
    
    
        /**
         * 身份验证
         * @param authenticationToken
         * @return
         * @throws AuthenticationException
         */
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
            //获取用户的输入的账号.
            String username = (String)token.getPrincipal();
            //通过username从数据库中查找 User对象,如果找到,没找到.
            //实际项目中,这里可以根据实际情况做缓存,如果不做,Shiro自己也是有时间间隔机制,2分钟内不会重复执行该方法
            TSUser userInfo = userService.findByUsername(username);
            if(userInfo == null){
                return null;
            }
            //账号判断;
            //加密方式;
            //交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配,如果觉得人家的不好可以自定义实现
            String Md5pass = userInfo.getPassword();//"25d55ad283aa400af464c76d713c07ad";
            SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(userInfo,Md5pass,getName());//此处传的是用户对象,实体中密码,和getName
            //明文: 若存在,将此用户存放到登录认证info中,无需自己做密码对比,Shiro会为我们进行密码对比校验
            return authenticationInfo;
        }
    }
    

     

  4. application.pproperties

    spring.thymeleaf.prefix=classpath:/templates/page/
    spring.thymeleaf.suffix: .html
    spring.mvc.static-path-pattern=/templates/**
    spring.resources.static-locations=classpath:/templates

     

Blender关于GIS安装及使用天地图 Blender下载安装及GIS插件的安装及使用 阅读详情

相关推荐

信号与系统——卷积、相关运算与FFT关系以及工程应用(三)

卷积运算、相关运算

qq_35028634的博客 6613

maven 仓库

apache https://repository.apache.org/snapshots/ https://repo1.maven.org/maven2/ spring https://repo.spring.io/libs-milestone 阿里云 http://maven.aliyun.com/nexus/content/groups/public/ ...

qq_34874784的博客 353

SAP 销售订单及发票 利润中心替代 Userexit出口 配置及程序

在跨公司销售业务中,跨公司销售订单的发票时无法从销售订单中将利润中心带到发票中,所以在跨公司的发票创建过程中需要配置出口来获取对应销售订单行项目的利润中心。 事务代码: 0KEM 配置步骤: 1、创建一个新的替代 2、创建一个步骤 3、维护一个先决条件,比如针对于特定工厂 PCASUB-VKBUR = '0001' 4、选择替代程序FORM,FORM必须为指定程序中存在的FORM名 5、编辑替代程序FORM 实现效果: 在程序FORM中打上断点 ...

李威威wiwi的博客 5069

一篇文章教你spring源码搭建和跳过本人踩过的坑

#Spring5源码下载搭建注意事项 1.JDK需要升级到1.8以上。 2.由于Spirng5以后都是采用Gradle来编译,gradle版本4.3.1,下载地址:https://gradle.org/next-steps/?version=4.3.1&format=bin,下载下来解压即可,无需安装 3.Spring3.0开始,Spring源码采用github托管,不再提供官网下载链接。...

qq_35576976的博客 2190

电磁波函数复数表示法:为什么物理学家偏爱e^(ikz)而非cos(kr-wt)?

本文深入解析了电磁波函数复数表示法(如e^(ikz))相较于传统余弦形式的巨大优势。通过欧拉公式,复数形式将复杂的三角运算转化为简洁的指数运算,在微分、积分、线性叠加及处理相位时展现出极高的计算效率,是物理学家和工程师分析波动现象的核心工具。

weixin_29094539的博客 499

Python实战:5分钟搞定抖音无水印视频下载(附完整代码)

本文系统介绍了抖音无水印视频下载的多种技术方案,重点解析了抖音视频的获取逻辑与去水印原理。文章提供了从零代码的浏览器插件到可编程的Python脚本的完整实现路径,并附带了详细的代码示例,帮助用户快速构建自己的抖音视频下载工具箱。

weixin_29089057的博客 849

Spring学习笔记10

用户身份验证应用程序的安全机制需要在授权用户访问资源之前确定用户的身份,即用户是谁。大多数应用都会弹出一个登陆界面供用户输入用户名密码。在Spring安全机制中,authentication manager由org.acegisecurity.AuthenticationManager接口定义。public insterface AuthenticationManager {     

amethystic 1133

Vue路由守卫实战:利用token实现跨项目免登录跳转(最新版)

本文详细介绍了如何利用Vue路由守卫和Token验证实现跨项目免登录跳转方案。通过核心架构设计、路由守卫精细化控制及Token交换安全实践,有效解决了多系统跳转中的认证问题,提升用户体验和系统连贯性。

n7o8p的博客 140

Spring repo - repo.spring.io

Spring repo - repo.spring.io https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework

josephhao的博客 5496

目前固态激光雷达在机器人领域的应用难点汇总

固态激光雷达在机器人领域面临性能与成本的双重挑战:探测性能上,动态范围不足(60-80dB)导致高/低反射物体识别困难,近距盲区(30-50cm)与长距精度(±3cm)矛盾突出;结构上视场角与点云密度难以平衡,多雷达拼接又带来同步误差。成本方面,核心元件(SPAD/OPA芯片)良率低(<50%)、校准工序复杂,单机成本超200美元。环境适应性上,粉尘附着、振动偏移(±2°)和光衰(1万小时衰减15%)制约可靠性。

start_up_go的博客 482

28-Halcon-- union_object_model_3d函数功能(用于3D模型融合)

Halcon算子union_object_model_3d是专业的3D模型融合工具,主要用于多视图拼接、部件组装和多源数据融合。该算子支持点云、网格和参数化模型输入,提供多种融合算法选择,包括基础点云拼接('points_cloud')、网格融合('mesh')和精确CAD布尔运算('cad')。工业应用涵盖逆向工程扫描拼接、汽车部件虚拟装配等场景,支持性能优化如空间分区和流式处理。算子还解决颜色属性融合、法向量保留等特殊需求,并提供拼接误差分析、拓扑验证等质量评估手段。最佳实践包含动态场景重建工作流和CA

weixin_45590420的博客 1055

【Shiro第二篇】SpringBoot + Shiro实现用户身份认证功能

一、概述 前面一篇文章,我们已经总结了Shiro相关的一些概念以及架构知识,相信小伙伴们对Shiro安全框架都有了一定的认识。本篇文章我们将通过示例详细说明在日常工作中常见的-----用户身份认证功能。 什么是身份认证呢,简单理解,就是在应用中谁能证明他就是他本人。一般提供如他们的身份 ID 一些标识信息来表明他就是他本人,如提供身份证,用户名 / 密码来证明。 在 shiro 中,用户需要提供principals(身份)和credentials(证明)给 shiro,从而应用能验证用户身份: ...

weixiaohuai的博客 1090

解锁RK3588+RTL8211F:千兆以太网PHY调优秘籍

本文探讨了RK3588芯片搭配RTL8211F千兆以太网PHY的优化方案。文章首先分析了RK3588和RTL8211F的硬件特性,指出时序问题可能源于时钟信号不稳定、传输延迟和PHY内部逻辑延迟。针对这些问题,提出了选用高质量时钟源、优化PCB布线等时序优化策略,以及合理配置硬件参数、优化网络协议等延迟优化方法。在配置实践部分,详细介绍了硬件连接规范和软件配置步骤,并建议使用Iperf、Ping等工具进行性能测试。最后总结了常见问题解决方案,展望了未来PHY芯片和传输技术的发展趋势。这些优化措施可显著提升网

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 288

SpringBoot整合Shiro之拦截器配置

SpringBoot整合Shiro之拦截器配置   springboot整合shiro应用 https://www.cnblogs.com/ll409546297/p/7815409.html 1、Shiro是Apache下的一个开源项目,我们称之为Apache Shiro。它是一个很易用与Java项目的的安全框架,提供了认证、授权、加密、会话管理,与spring Security 一样都...

行知致简的专栏 6423

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

springboot整合shiro

-shiro和springboot整合的依赖-->

weixin_57366447的博客 138

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

shiro在springboot中的使用以及权限管理的实现

方法中,可以根据用户的角色、权限等信息,将其拥有的权限字符串添加到授权信息中。在Shiro中,权限通常使用字符串表示,可以根据应用场景自行定义权限字符串。用于存储系统角色的基本信息,包括角色名称、描述等。用于存储系统权限的基本信息,包括权限名称、描述等。用于存储系统用户的基本信息,包括用户名、密码等。路径下的不同HTTP方法所需要的权限,例如。注解,指定需要的权限。如果用户没有足够的权限,将会抛出。用于存储系统角色与权限的关联信息。在需要进行权限控制的方法上,使用。3.实现自定义Realm。

qq_56921846的博客 543

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Springboot整合shiro(及yaml配置形式)

1.shiro是什么? Shiro是Apache下的一个开源项目。shiro属于轻量级框架,相对于SpringSecurity简单的多,也没有SpringSecurity那么复杂。以下是我自己学习之后的记录。 官方架构图如下: 2.主要功能 shiro主要有三大功能模块: 1. Subject:主体,一般指用户。 2. SecurityManager:安全管理器,管理所有Subject,可以配合...

Dreamer. 9554

Shiro整合SpringBoot实现登录认证

这里写自定义目录标题Shiro整合SpringBootShiro以及SpringBoot环境配置mvaen环境配置实体类的创建User类的创建UserVo的创建解释一下VoUserVo代码块SpringBoot的配置application.properties中的配置application.yml中的配置配置合并Shiro的配置ShiroConfig文件UserRealm.java文件Contro...

weixin_44048746的博客 310

Shiro身份认证和权限管理(授权)

1. Shiro的身份认证流程信息: 后台接受凭证信息(密码)和身份信息(用户名)封装到Subject主体中,调用Subject自己的登陆方法,完成校验。底层校验代码是实现AuthenticatingRealm 类重写doGetAuthentica方法,根据传过来的值来 查询数据库完成用户认证。 2. Shiro的用户授权流程信息: 先认证过以后,根据认证信息查询用户的权限级别,...

nanZhaiXiaoLang的博客 1132

Shiro基础及应用

Shiro安全框架 一、Shiro简介 官网文档:http://shiro.apache.org/tutorial.html Apache Shiro 是一个Java 的安全(权限)框架。 Shiro可以完成,认证,授权,加密,会话管理,Web集成,缓存等。 Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环 境。 主要功能 Authentication:身份认证、登录,验证用户是不是拥有相应的身份; Authorization:授权,即权

让我们跟随时代步伐,时刻学习时刻记录! 332

SpringBoot 集成Shiro

SpringBoot2.0集成Shiro 最近搞了下shiro安全框架,网上找了好多篇博客,感觉要么都是复制粘贴,要么就是错误百出。至于稍微讲解一下为什么要这么做,就更别说了。这篇文...

Suneey专栏 385

前后端分离项目中 springboot 集成 shiro 实现权限控制

前后端分离项目中 springboot 集成 shiro 实现权限控制

Jaemon 2661

Spring Boot 集成Shiro

Spring Boot 集成Shiro maven引入依赖 &lt;!--shiro--&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.shiro&lt;/groupId&gt; &lt;artifactId&gt;shiro-spring-boot-web-starter&lt...

xuxiake2016的博客 220

Springboot集成Shiro

本文是回馈粉丝的一份礼物,旨在springboot中快速集成shiro实现鉴权,无需到处查资料,简单易懂,复制粘贴,一气呵成。

weixin_46242847的博客 724

SpringBoot+Shiro管理

Shiro是一款主流的Java安全框架,不依赖任何容器,可以运行在Java SE和Java EE项目中。它的主要作用是对访问系统的用户进行身份认证、授权、会话管理、加密等操作。Shiro基于session进行身份认证和访问控制,提供了一套完善的权限管理机制。

CAORENZHU的博客 1031
上一篇: Spring Boot + Shiro + JPA 项目整理
下一篇: Hibernate联合主键 注解方式实现
codeLife1993
博客等级 码龄8年 23粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值