Shiro入门之实现登录登出

article/2025/8/20 21:33:24

概述

这里使用Shiro来实现用户的登录和登出功能。

前提:已经会Spring集成Shiro。即使没有下面也会提供源码,下面只说明Shiro部分的核心代码,如Mapper、Service类中的代码基本上就是从数据库中读取数据,而且源码有提供,不在说明。

实现

第一步:一个用于登录的页面和一个用于退出登录的页面。

login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Login</title>
</head>
<body>
<form action="/user/login" method="post">用户名:<input type="text" name="username"/><br/>密码:<input type="password" name="password"/><br/>记住我:<input type="checkbox" name="rememberMe"><input type="submit" value="登录"><p>注:登录成功的账户是root和123456</p>
</form>
</body>
</html>

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>恭喜${sessionScope.get("user").username}登录成功!</h1>
<a href="/user/logout">退出</a>
</body>
</html>

第二步:使用Shiro实现登录

第三步:实现退出逻辑

第四步:自定义类继承AuthorizingReal,实现里面的两个方法,但登录只需要实现认证方法doGetAuthenticationInfo()方法即可。

@Component
public class MyRealm extends AuthorizingRealm {@Autowiredprivate UserService userService;// 完成授权protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {return null;}// 完成认证protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {// authenticationToken是主体传过来的认证信息,如果使用的是UsernamePasswordToken,那么可以转换成该类型UsernamePasswordToken token=(UsernamePasswordToken)authenticationToken;// 1.获取用户输入的用户名String username=token.getUsername();// token.getPrincipal();也是获取相同的用户名// 2.通过用户名从数据库中查询用户信息User user = userService.selectUserByUsername(username);// 3.判断查询到的用户信息是否有效if(user==null){throw new UnknownAccountException();}if(0==user.getState()){// 用户状态为0,表示该用户被禁用了throw new DisabledAccountException();}// 4.返回用户认证信息SimpleAuthenticationInfo info=new SimpleAuthenticationInfo(username,// 可以是用户名,也可以是用户信息user.getPassword(),// 用户密码ByteSource.Util.bytes(username),// 为密码加的盐getName());// 固定写法,是一个名字return info;}
}

注意:这里的用户信息是从数据库查到的,用了Service、Mapper接口等,这属于SSM的知识,这里不做说明。

第五步:在spring的配置文件applicationContext.xml中设置自定义的Realm。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"><!--配置Shiro的认证和授权的过滤器--><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityManager" ref="securityManager"/><property name="loginUrl" value="login.html"/><property name="unauthorizedUrl" value="403.html"/><property name="filterChainDefinitions"><value><!--对静态资源不拦截--><!--anon指匿名访问的过滤器,所有匿名用户都可以访问静态资源,如css等-->/css/*=anon<!--登录页面可以访问-->/login.html = anon<!--登录请求也可以通过-->/user/login = anon<!--表示/testRole请求必须是admin角色才能访问,roles["角色名"]是标准格式-->/testRole = roles["admin"]<!--表示/testRole2请求必须同时具备admin和user角色才能访问-->/testRole2 = roles ["admin","user"]<!--表示/testPerms请求必须具有user:delete权限才能访问,perms["权限名"]是标准格式-->/testPerms = perms["user:delete"]<!--表示/testPerms2请求必须同时具有user:delete权限和user:update权限才能访问-->/testPerms2 = perms["user:delete","user:update"]<!--authc指必须经过认证(登录过之后)才能放弃的请求,/*指的是所有有一个斜杠的请求都要经过认证--><!--/**表示所有资源和请求都需要认证,/** = authc是标准格式--><!--/** = authc--><!--/**=user指的是系统中所有资源和请求需要验证通过或者RememberMe登录的都可以,/**=user是标准格式-->/**=user</value></property></bean><!--创建安全管理器SecurityManager对象--><bean class="org.apache.shiro.web.mgt.DefaultWebSecurityManager" id="securityManager"><!--声明域,在域中读取认证和授权的数据--><property name="realm" ref="myRealm"/><!--声明rememberMe管理器--><property name="rememberMeManager" ref="rememberMeManager"/></bean><!--配置自定义的Realm--><bean class="com.demo.shiro.realm.MyRealm" id="myRealm"><property name="credentialsMatcher" ref="credentialsMatcher"/></bean><!--加密管理器对象--><bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher" id="credentialsMatcher"><!--设置加密的算法:MD5--><property name="hashAlgorithmName" value="md5"/><!--设置加密的次数--><property name="hashIterations" value="1"/></bean><!--配置记住我--><bean class="org.apache.shiro.web.mgt.CookieRememberMeManager" id="rememberMeManager"><property name="cookie" ref="rememberMeCookie"/></bean><bean class="org.apache.shiro.web.servlet.SimpleCookie" id="rememberMeCookie"><!--声明Cookie对象--><constructor-arg value="rememberMe"/><!--设置cookie的失效时间,单位是秒--><property name="maxAge" value="3600"/></bean>
</beans>

注意,数据库里面的密码是使用了Md5Hash加密了的,使用的盐的用户名。可以通过下面的代码来获取加密后的密文。

下面是关于配置的说明:

简化掉Shiro过滤器的配置:

第六步:在web.xml中配置Shiro的过滤器

其实上面这些步骤也是Spring集成Shiro的配置,都属于Shiro的配置。

源码

最好的办法还是看源码直观感受Shiro的登录。

源码地址:GitHub的Demo


http://chatgpt.dhexx.cn/article/Ntuq7j4a.shtml

相关文章

cas5.3.2单点登录-单点登出(十一)

原文地址&#xff0c;转载请注明出处&#xff1a; https://blog.csdn.net/qq_34021712/article/details/81515317 ©王赛超 既然有单点登录,肯定就要有登出,之前的整合都是只针对了登录&#xff0c;对登出并没有关注,今天我们就来讲讲登出。 关于单点登出原理&#…

数说故事车企数字化渠道管理创新方法——精准进行消费者洞察

随着疫情带来的变化&#xff0c;原来在一二线城市的购物中心店&#xff0c;受人流量的不确定性冲击越来越大&#xff0c;但成本的支出也越来越高。因此购物中心店&#xff0c;将有可能从原来的重“集客”功能&#xff0c;变成更多的从品牌、体验出发的形象中心店&#xff0c;“…

权威报告!这五个消费趋势,告诉你如何抓住中国消费者的心和钱包

有人说2023年是消费复苏的一年&#xff0c;市场回暖趋势明显&#xff1b;也有人说之前的亏空太大&#xff0c;想要短时间追上来不太可能&#xff0c;因此2023的消费市场最多是不低迷&#xff0c;达不到火热。 这可把做生意的各位老板整纠结了&#xff0c;究竟今年要不要投个大手…

ChatGPT与数据挖掘:洞察消费者行为,优化营销策略

随着科技的不断进步和数字化时代的到来&#xff0c;企业们越来越意识到数据的重要性。在零售和电子商务行业&#xff0c;了解消费者行为并准确洞察其需求&#xff0c;是成功营销和提升业绩的关键。而现在&#xff0c;借助人工智能技术中的ChatGPT以及数据挖掘技术&#xff0c;企…

市场营销学5——消费者购买行为分析

什么是消费者购买行为 消费者购买行为是指人们为满足需要和欲望而寻找、选择、购买、使用、评价及处置产品、服务时介入的过程活动&#xff0c;包括消费者的主观心理活动和客观物质活动两个方面。 消费者购买行为分析的环节 消费者购买行为研究包括以下几个环节&#xff1a; 购…

【消费战略方法论】认识消费者的恒常原理(三):消费者刺激反馈原理

人类是一种高度智能的生物&#xff0c;而所谓智能的核心在于其理解世界的能力&#xff0c;而理解世界的过程中必然伴随着感知和反应。人的刺激反馈机制就是在这个过程中发挥着重要的作用。 刺激反馈机制是一种生物学的反应现象&#xff0c;它指的是人体对外界刺激的感知与反应…

大数据之kafka消费者

&#x1f352;今天是端午节&#xff0c;先祝大家端午节快乐&#xff01;上一期我们学习了kafka的broker部分主要介绍了kafka中的副本、kafka文件的存储的原理&#xff0c;以及kafka的高效读写的保证&#xff0c;今天我们来介绍kafka中的消费者原理&#xff0c;对往期内容感兴趣…

元年智答|数据洞察功能介绍

什么是数据洞察 随着企业积累数据量增多&#xff0c;数据分析师常常需要处理“长且宽”的数据集。依靠人的经验处理海量数据&#xff0c;从海量数据中发掘出有用的信息无异于大海捞针。虽然人工智能技术的普及和单位算力价格的下降大大降低了数据挖掘的门槛&#xff0c;但是面…

营销创意没灵感?社交媒体和消费者洞察给你答案

创意是营销的核心。 品牌需要优秀的创意营销才能吸引消费者、与受众建立联系、宣传产品与服务。 想要营销内容创作方面表现出色&#xff0c;品牌就需要源源不断的新鲜创意来抓住人们的眼球、占领消费者注意力。 在实际营销过程中&#xff0c;出海品牌常常为创意冥思苦想、绞尽…

经典消费者生产者问题

首先你需要了解多线程的流程以及实现多线程的几种方法&#xff0c;同时你要理解什么是并行、并发&#xff0c;以及线程和进程的区别&#xff0c;这里做简要的区别。 线程&#xff1a;一个进程包括多个线程 并行&#xff1a;多个cpu实例或者多台机器同时执行一段处理逻辑&#x…

【报告分享】德勤:2023中国消费者洞察与市场展望.pdf(附下载链接)

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2022年12月份热门报告盘点 罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿2023年&#xff0c;如何科学制定年度规划&#xff1f; 《底层逻辑》高清配图 华为202…

2023中国消费者洞察报告

下载报告去公众号&#xff1a;硬核刘大 后台回复“ 消费者洞察”&#xff0c;即可下载完整PDF文件。 更多报告内容&#xff0c;可加微信&#xff1a;chanpin628 领取。(ps&#xff1a;加过微信&#xff1a;chanpin628 的不要再加&#xff0c;分享的内容一样&#xff0c;有一个…

大数据营销更需要消费者洞察

2013年10月17日&#xff0c;独立商业趋势观察家&#xff0c;知名中国消费趋势研究专家&#xff0c;数字营销专家肖明超先生&#xff0c;应凤凰网的邀请参加了凤凰网在广州举办的“营销人的幸福梦”主题沙龙活动&#xff0c;并与凤凰网副总裁徐进、琥珀传播CEO刘阳&#xff0c;一…

消费者消费消息分析

消费者读流程 】每个consumer都可以根据分配策略&#xff08;默认RangeAssignor&#xff09;&#xff0c;获得要消费的分区 】 获取到consumer对应的offset&#xff08;默认从ZK中获取上一次消费的offset&#xff09; 】 找到该分区的leader&#xff0c;拉取数据 】 消费者提交…

消费者详解-消费消息(1)

文章目录 消费者消费消息流程Pull消费流程1. 初始化消费者2. 拉取topic的消息队列3. 拉取消费位点4. 根据消费位点消费消息5. 保存消费进度拉取消息-pullKernelImpl Broker处理拉取消息请求1、权限、参数校验并且获取初始化变量&#xff1a;2、获取拉取消息的topic配置3、解析订…

直播报名 | 海外社交媒体趋势如何?出海品牌如何掌握消费者洞察?

近年来&#xff0c;中国品牌出海势头强劲&#xff0c;智能硬件、互联网应用、时尚服饰等正加速风靡海外市场&#xff0c;涌现出像安克创新、SHEIN这样的全球化品牌。有人提问&#xff0c;安克创新&#xff0c;凭借什么成为全球化品牌&#xff1f;出海企业可以从中借鉴什么&…

Kafka消费者不消费数据

背景&#xff1a; 工作往往是千篇一律&#xff0c;真正能学到点知识都是在上线后。使用SkywalkingKafkaES进行应用监控。 现象&#xff1a; 公司使用Skywalking在开发测试环境中Kafka顺利消费数据&#xff0c;到了UAT环境一开始还正常&#xff0c;后面接入了更多的应用后出现…

食品品牌如何做好消费需求洞察直抵消费者心智

做生意的都明白这样一个道理&#xff1a;“先找到买主&#xff0c;再依照需求出售”。之所以这一点很重要&#xff0c;因为这揭示了一条经营企业过程中必须遵守的金科玉律&#xff1a;先有需求&#xff0c;而后才有你的品牌、服务或功能。 需求洞察是品牌、产品、服务等一切的…

消费者洞察:数据影响消费,消费营造数据

本文根据Stratifyd资深解决方案经理段鑫龙(Bruce Duan)在9月24日的直播演讲内容整理,演讲围绕“如何洞察消费者”从四个层面展开:首先是(疫情期间以及后疫情时代)消费品行业的发展现状和未来趋势;然后是当前现状下如何通过数据化闭环洞察消费者;有了前面的理论支撑和方…

助力品牌洞察——消费者情绪行为分析

什么是情绪分析&#xff1f; 随着社交网络和数字营销的出现&#xff0c;消费者对产品和品牌的评价受到越来越多的关注。在线用户反馈&#xff08;例如产品评价、社交媒体评论和调查问卷等&#xff09;包含了大量具有价值的数据。通过这些数据&#xff0c;可以了解消费者对您产…