Shiro自定义Ream
- 项目目录结构
2.代码:
package com.sun.shiro;import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.realm.Realm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/*** 自定义realm的实现* @author suntan* @dade 2017年3月3日下午7:27:42* @version v1.0*/
public class MyRealmDemo1 implements Realm{/*** 日志*/private Logger logger = LoggerFactory.getLogger(MyRealmDemo1.class);public String getName() {return "myReamDemo1";}public boolean supports(AuthenticationToken token) {return token instanceof UsernamePasswordToken;}public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {//获取用户名和密码String userName = (String) token.getPrincipal();//String passWord = (String) token.getCredentials();String passWord = new String((char[])token.getCredentials());if(!StringUtils.equals(userName, "sunny")) {logger.info("=======>用户名错误");throw new UnknownAccountException();}if(!StringUtils.equals(passWord, "1127")) {logger.info("====>密码错误");throw new IncorrectCredentialsException();}//用户名密码都对return new SimpleAuthenticationInfo(userName, passWord, getName());}}
3.测试代码
package com.sun.shiro;import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class MyRealmDemo1Test {/*** 日志*/private Logger logger = LoggerFactory.getLogger(MyRealmDemo1Test.class);@Testpublic void testGetAuthenticationInfo() {//1.加载配置文件Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro_realm.ini");//2.实例化对象SecurityManager securityManager = factory.getInstance();//绑定SecurityUtils.setSecurityManager(securityManager);//的到当前用户Subject subject = SecurityUtils.getSubject();//根据用户名密码登陆UsernamePasswordToken token = new UsernamePasswordToken("sunny", "1127");try {logger.info("=======>执行登陆");subject.login(token);logger.info("=======>登陆成功");} catch (Exception e) {logger.error("========>登陆失败:" + e);}//登出subject.logout();}}
执行结果:
Shiro自定义Ream相关推荐
- 从实例入手学习Shiro自定义Realm实现查询数据进行验证
场景 从实例入手学习Shiro与Web的整合: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/90140802 在上面已经实现整合 ...
- springboot项目中使用shiro 自定义过滤器和token的方式___shiro使用token登录流程
springboot项目中使用shiro 自定义过滤器和token的方式 实现步骤主要是以下几步: 1. 在项目中导入maven依赖 <dependency><groupId> ...
- shiro学习系列:shiro自定义filter过滤器
shiro学习系列:shiro自定义filter过滤器 自定义JwtFilter的hierarchy(层次体系) 上代码 package com.finn.springboot.common.conf ...
- springboot+shiro自定义拦截器互踢问题
shiro自定义拦截器继承AccessControllerFilter,实现session互踢机制. 应用场景: 我们经常会有用到,当A 用户在北京登录 ,然后A用户在天津再登录 ,要踢出北京登录的状 ...
- shiro自定义Realm
1.1 自定义Realm 上边的程序使用的是shiro自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义realm. ...
- spingboot下shiro自定义过滤器roles
shiro默认的roles过滤,是与的关系,就是你的用户得有roles对应的所有角色,才算有权限. 但是实际开发过程中,更多的是或的需求,只要用户满足roles中的一个角色,就算有权限. 所以就涉及到 ...
- shiro自定义过滤器
出处: https://www.cnblogs.com/lyxy/p/6694387.html 项目中需要所有首次登录的用户必须修改密码才可使用系统,项目采用的是Shiro框架. 突然想到了配置文件o ...
- Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证
一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...
- shiro 自定义logout路径
${adminPath}/logout = logout shiro 登出走 LogoutFilter 过滤器,登出默认重定向到redirecUrl这个地址(/) public class Logou ...
- shiro自定义filter
这里我们来做一个需求 我们在shiroconfigrution里面定义了我们的角色权限 这个意思是角色只有包含base和admin这两个角色的时候,我们才能访问/dd这个url /dd这个url只是一 ...
最新文章
- C++知识点45——类继承中的类型转换与访问权限控制(上)
- 应用程序范围的键值对
- Amazon.com 和 store.apple.com 哪个的购物体验更好?
- matlab动态显示鼠标值,动态显示鼠标的坐标值和像素值
- 数据分析中数据概览神器pandas_profiling介绍
- Code snippet of the day : Get Chinese Spell in C#
- Qt5.9配置安卓开发环境
- oracle 排除节假日,ORACLE 计算节假日
- mapreduce新编程实例
- 备案域名基础知识,网站备案新政策
- 关于U盘文件消失,但是内存还在的情况。
- EasyClick更新图库
- 程序员的5个级别,你属于哪一个等级?
- 微信商城怎么做?5招教你捋清思路
- 双网卡双IP,实现南北互通
- Cadence Allegro向导创建DIP排针封装图文教程及视频演示
- 三级等保测评-服务器设置三权分立
- PHP项目中使用Guzzle执行POST和GET请求
- 半导体--上下游产业链
- ad9361函数功能配置
热门文章
- 语音输入是计算机在哪个领域的应用,语音识别技术是什么_语音识别技术应用领域介绍...
- 百分点感知智能实验室:声纹识别技术发展及未来趋势研究
- html中背景属性的缩写语法,CSS缩写
- 靠一套PPT上市估值120亿:新能源韭菜的自我修养
- 驱动开发:Win10枚举完整SSDT地址表
- bootstrap btn按钮颜色
- 【哈利波特】Sherbert Lemon对HP的解读之10
- matlab单位阶跃响应与单位脉冲响应,python 已知响应函数求单位阶跃响应或脉冲响应...
- Windows10下WSL的配置与使用
- 【分布式缓存之Voldemort 介绍】