1. 项目目录结构

    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相关推荐

  1. 从实例入手学习Shiro自定义Realm实现查询数据进行验证

    场景 从实例入手学习Shiro与Web的整合: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/90140802 在上面已经实现整合 ...

  2. springboot项目中使用shiro 自定义过滤器和token的方式___shiro使用token登录流程

    springboot项目中使用shiro 自定义过滤器和token的方式 实现步骤主要是以下几步: 1. 在项目中导入maven依赖 <dependency><groupId> ...

  3. shiro学习系列:shiro自定义filter过滤器

    shiro学习系列:shiro自定义filter过滤器 自定义JwtFilter的hierarchy(层次体系) 上代码 package com.finn.springboot.common.conf ...

  4. springboot+shiro自定义拦截器互踢问题

    shiro自定义拦截器继承AccessControllerFilter,实现session互踢机制. 应用场景: 我们经常会有用到,当A 用户在北京登录 ,然后A用户在天津再登录 ,要踢出北京登录的状 ...

  5. shiro自定义Realm

    1.1 自定义Realm 上边的程序使用的是shiro自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义realm. ...

  6. spingboot下shiro自定义过滤器roles

    shiro默认的roles过滤,是与的关系,就是你的用户得有roles对应的所有角色,才算有权限. 但是实际开发过程中,更多的是或的需求,只要用户满足roles中的一个角色,就算有权限. 所以就涉及到 ...

  7. shiro自定义过滤器

    出处: https://www.cnblogs.com/lyxy/p/6694387.html 项目中需要所有首次登录的用户必须修改密码才可使用系统,项目采用的是Shiro框架. 突然想到了配置文件o ...

  8. Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证

    一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...

  9. shiro 自定义logout路径

    ${adminPath}/logout = logout shiro 登出走 LogoutFilter 过滤器,登出默认重定向到redirecUrl这个地址(/) public class Logou ...

  10. shiro自定义filter

    这里我们来做一个需求 我们在shiroconfigrution里面定义了我们的角色权限 这个意思是角色只有包含base和admin这两个角色的时候,我们才能访问/dd这个url /dd这个url只是一 ...

最新文章

  1. C++知识点45——类继承中的类型转换与访问权限控制(上)
  2. 应用程序范围的键值对
  3. Amazon.com 和 store.apple.com 哪个的购物体验更好?
  4. matlab动态显示鼠标值,动态显示鼠标的坐标值和像素值
  5. 数据分析中数据概览神器pandas_profiling介绍
  6. Code snippet of the day : Get Chinese Spell in C#
  7. Qt5.9配置安卓开发环境
  8. oracle 排除节假日,ORACLE 计算节假日
  9. mapreduce新编程实例
  10. 备案域名基础知识,网站备案新政策
  11. 关于U盘文件消失,但是内存还在的情况。
  12. EasyClick更新图库
  13. 程序员的5个级别,你属于哪一个等级?
  14. 微信商城怎么做?5招教你捋清思路
  15. 双网卡双IP,实现南北互通
  16. Cadence Allegro向导创建DIP排针封装图文教程及视频演示
  17. 三级等保测评-服务器设置三权分立
  18. PHP项目中使用Guzzle执行POST和GET请求
  19. 半导体--上下游产业链
  20. ad9361函数功能配置

热门文章

  1. 语音输入是计算机在哪个领域的应用,语音识别技术是什么_语音识别技术应用领域介绍...
  2. 百分点感知智能实验室:声纹识别技术发展及未来趋势研究
  3. html中背景属性的缩写语法,CSS缩写
  4. 靠一套PPT上市估值120亿:新能源韭菜的自我修养
  5. 驱动开发:Win10枚举完整SSDT地址表
  6. bootstrap btn按钮颜色
  7. 【哈利波特】Sherbert Lemon对HP的解读之10
  8. matlab单位阶跃响应与单位脉冲响应,python 已知响应函数求单位阶跃响应或脉冲响应...
  9. Windows10下WSL的配置与使用
  10. 【分布式缓存之Voldemort 介绍】