【千锋南京JAVA】jwt结合shiro和idea版_每日看点
用BCrypt加密的shiro配置多个realm配置Shiro的多Realm验证的实现–shiro实现不同身份使用不同Realm进行验证 springboot整合shiro和idea版最新Apache Shiro快速入门Security安全框架【千锋南京JAVA】 jwt结合shiro使用
(资料图片)
@Bean public ShiroRealm getRealm() {ShiroRealm shiroRealm1 = new ShiroRealm(); shiroRealm1.setCredentialsMatcher(new CredentialsMatcher() {@Override public boolean doCredentialsMatch(AuthenticationToken authenticationToken, AuthenticationInfo authenticationInfo) {UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; String plaimtext = new String(token.getPassword()); String hashed = authenticationInfo.getCredentials().toString(); System.out.println("明文密码"+plaimtext+hashed); return BCrypt.checkpw(plaimtext,hashed); } }); return shiroRealm1; }
package com.sbibits.config;import org.apache.shiro.SecurityUtils;import org.apache.shiro.spring.web.ShiroFilterFactoryBean;import org.apache.shiro.subject.Subject;import org.apache.shiro.web.mgt.DefaultWebSecurityManager;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.util.LinkedHashMap;import java.util.Map;/** * @author admin * @version 1.0.0 * @ClassName ShiroConfig.java * @Description TODO * @createTime 2019年12月12日 16:10:00 */@Configurationpublic class ShiroConfig {//创建ShiroFilterFactoryBean @Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); //设置安全管理器 shiroFilterFactoryBean.setSecurityManager(securityManager); /** * 添加shiro内置过滤器 * 常用的过滤器: * anon:无需认证可以访问 * authc:必须认证 * user:若使用remeberme的功能可以访问 * perms:须得到授权 * role: 需得到角色可访问 * */ MapfilterMap = new LinkedHashMap<>(); filterMap.put("/user/*", "authc"); filterMap.put("/*", "anon"); //修改调整的页面// shiroFilterFactoryBean.setLoginUrl("/"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap); return shiroFilterFactoryBean; } //创建DefaultWebSecurityManager @Bean(name = "securityManager") public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); //关联realm securityManager.setRealm(userRealm); return securityManager; } //创建realm @Bean(name = "userRealm") public UserRealm getRealm() {return new UserRealm(); }}
package com.sbibits.config;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.AuthenticationInfo;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;/** * @author admin * @version 1.0.0 * @ClassName UserRealm.java * @Description TODO * @createTime 2019年12月12日 16:12:00 */public class UserRealm extends AuthorizingRealm {//执行授权逻辑 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {System.out.println("执行授权逻辑"); return null; } //执行认证逻辑 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {return null; }}
用户注册时,先用bcrypt加密存入数据库 执行认证逻辑时,用 BCrypt.checkpw判断密码是否相同,返回boolean值 获取盐 登出操作
shiro
导入依赖
org.apache.shiroshiro-spring1.4.0
编写shiro两个核心配置shiroconfig和userrealm
public class UserRealm extends AuthorizingRealm {//授权逻辑 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {System.out.println("执行授权逻辑"); SimpleAuthorizationInfo sa = new SimpleAuthorizationInfo(); sa.addStringPermission("user:add"); return sa; } //认证逻辑 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {System.out.println("执行认证逻辑"); UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken; return new SimpleAuthenticationInfo("","1234",""); }
@Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); //设置安全管理器 shiroFilterFactoryBean.setSecurityManager(securityManager); return shiroFilterFactoryBean; } //创建DefaultWebSecurityManager @Bean(name = "securityManager") public DefaultWebSecurityManager getDefaultWebSecurityManager() {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); //关联realm securityManager.setRealm(getRealm()); return securityManager; } //创建realm,需要自定义realm @Bean public UserRealm getRealm() {return new UserRealm(); }
编写controller
@PostMapping("register") public String shiro(User user, Model model) {//获取subject Subject subject = SecurityUtils.getSubject(); System.out.println("判断是否已经登录" + subject.isAuthenticated()); //若没有登录,把用户名密码封装为UsernamePasswordToken对象 UsernamePasswordToken token = new UsernamePasswordToken(user.getName(), user.getPassword()); try {//执行登录 subject.login(token); System.out.println("再判断是否已经登录" + subject.isAuthenticated()); return "success"; } catch (IncorrectCredentialsException e) {model.addAttribute("msg", "密码不存在"); return "login"; } catch (UnknownAccountException e) {model.addAttribute("msg", "用户名不存在"); return "login"; }
Shiro的三种授权(十二)
多个权限标识 hasAnyPermissions hasPermission
// 拥有 admin 角色可以访问 @RequiresRoles(“admin”) // 拥有 user 或 admin 角色可以访问 @RequiresRoles(logical = Logical.OR, value = {“user”, “admin”}) // 拥有 user 或 admin 角色,且拥有 vip 权限可以访问 @GetMapping("/getVipMessage") @RequiresRoles(logical = Logical.OR, value = {“user”, “admin”}) @RequiresPermissions(“vip”) public ResultMap getVipMessage() {return resultMap.success().code(200).message(“成功获得 vip 信息!”); }
标签:
相关推荐:
- []【千锋南京JAVA】jwt结合shiro和idea版_每日看点
- []Ctrls+c暂停redis-server设置开机自启动
- []全球简讯:spring-security-oauth2是什么?OAuth2与spring-security-oauth2
- []百度收录网站有哪些诀窍?百度收录网站的诀窍
- []简讯:u-center软件配置ublox系列协议手册 详情介绍
- []java连接数据库sql2000开发电话计费管理系统:环球快看点
- []世界微动态丨HEVC格式和H265格式有什么区别?DIVX、AVC、HEVC格式的区别
- []当前视点!大同市行政区划谷歌卫星地图 山西省大同市谷歌高清卫星地图下载
最新新闻:
- 停止一个Activity动态给UI控件设置前景透明色-世界观察
- iPhone4S怎么设置手机铃声?iPhone4S手机铃声设置步骤
- YY商城的交易方式有哪些?YY商城的方式一共有三种-观速讯
- 小米3全网通版再刷安卓原生系统:苹果iPhone5国行版
- 当前最新:数据库管理系统(DBMS)——数据库原理及其应用
- 动画显示Ammeter支持将电量、油量以动画形式展示(一)
- 【天天报资讯】iPhone怎么解除流量下载限制?iPhone解除流量下载限制的方法
- 头条:o哒取代基效应:分子中的电子效应
- 世界微动态丨HEVC格式和H265格式有什么区别?DIVX、AVC、HEVC格式的区别
- 前沿资讯!什么App软件里面可以换发型照相?发型屋、魔发相机和AR魔镜
- 冒险岛维护时间延长 升级至V161“黑魔法师”版本 世界视讯
- 世界焦点!什么是骨传导耳机?骨传导耳机品牌都有哪些?
- 如何做一个自动化感应垃圾桶?自动化感应垃圾桶制作教程
- 当前视点!大同市行政区划谷歌卫星地图 山西省大同市谷歌高清卫星地图下载
- morphologyEx函数实现黑帽操作 前沿热点
- 环球观热点:亚马逊kindle怎么设置?亚马逊的新款Kindle Fire平板电脑
- 怎样在word文档画虚线?Word文档小技巧_世界即时
- 百度收录网站有哪些诀窍?百度收录网站的诀窍
- 环球热资讯!电视黑屏有声音怎么回事?电视黑屏有声音的原因
- 【千锋南京JAVA】jwt结合shiro和idea版_每日看点
- 如何使用电脑录制视频?电脑录制视频的方法步骤|天天快讯
- java连接数据库sql2000开发电话计费管理系统:环球快看点
- 什么是3d打印?3D打印技术的发展趋势_环球速讯
- 希腊字母念法是什么?数学常用希腊字母念法
- JAVA办公管理系统(OA) 开源的java项目框架 新视野
- 2019年度编程语言排行榜:Go、Perl和Groovy上榜 焦点热门
- iPhone怎么把信号标志改成圆点?使用教程来了
- 什么是浏览器缓存?如何在所有主要浏览器中清除浏览器缓存?
- 希腊神话中最美丽的女人——木马屠城记-海伦特洛伊_全球消息
- 环球实时:混音器怎么用?混音器的操作方法
- 当前资讯!网络服务器负载均衡原理是什么?网络服务器的负载均衡结构有多厉害?
- 车载冰箱危害有哪些?车载冰箱危害介绍
- 环境映射是反射吗?mental ray渲染引擎----环境映射_焦点讯息
- 诺基亚最经典手机是什么?诺基亚最经典的五款手机介绍|天天亮点
- HBO公布《权力的游戏》第七季主演人选 布劳德本特即将加盟_世界微动态
- 微信聊天记录导出成纯文本文件 用安卓模拟器破解了 天天资讯
- 环球热文:Mac电脑中delete键的几种用法?delete键功能介绍
- 简讯:u-center软件配置ublox系列协议手册 详情介绍
- 什么是Gonic?老苏教你如何使用Gonsonic
- Ctrls+c暂停redis-server设置开机自启动
- 华为c8650怎么刷机?华为c88650的刷机教程及方法
- 视焦点讯!如何搭建高德离线地图服务?bigemap搭建离线地图二次开发示例
- 环球头条:NSA是假5G?NSA组网模式有哪些?
- 市场上销售的网络可视电话是什么?网络可视电话介绍与市场报价|环球时讯
- 小米8解BL锁教程 怎么申请BootLoader解锁?
- 国外拍摄婚礼应注意什么?海外摄影师须知常识 环球速读
- 全球简讯:spring-security-oauth2是什么?OAuth2与spring-security-oauth2
- 全球速看:wpcap.dll文件无法加载?wpcap.dll/Packet.dll/pthreadVC.dll丢失解决办法
- 今日精选:《坎巴拉太空计划2》预告片展示教学步骤
- 横版平台动作游戏《少女魔净》开场动画展示 环球报道
- 今日精选:《坎巴拉太空计划2》预告片展示教学步骤
- 曝姆巴佩想买下C罗的私人飞机 交易金额未透露:热头条
- -53℃漠河美女主播启动i9-13900K、RTX4090!魔幻一幕出现 今日热议
- 全球新资讯:藩王弊端那么明显,朱元璋非要坚持分封藩王,有何深意?
- “今年春节档后劲最大的电影”冲上热搜 你最喜欢哪一部?-焦点热议
- 《最后的生还者》第一集已在油管上免费提供 支持1080P:环球观点
- 游客爆料北海用餐被宰:4个菜1500元 出租车带去的
- 全球信息:小岛转发《死亡搁浅2》饭制海报 由预告画面拼接而成
- 《死亡空间:重制版》PC版存在CPU优化问题:快播报
- 《卧龙:苍天陨落》曹操刘备孙坚角色介绍 三国人设光荣烂熟于心
- 传《飙酷车神3》即将正式公布 采用新引擎开发 全球播报
- 《最终幻想起源:天堂的陌生人》可能有续作-每日头条
- GameFreak谈原创IP游戏开发:不该限制在小型项目上
- Tesla纯电皮卡继续跳票 正式量产要到2024年_世界简讯
- 《星露谷物语》厂商新作全力开发中:零加班 所以慢-每日焦点
- GDC年度游戏提名公布:《老头环》《流浪》六项领跑-环球热消息
- 天弘丰利LOF: 天弘丰利债券型证券投资基金(LOF)2022年第4季度报告:重点聚焦
- 男子餐厅点海鲜、葱姜费占60%?餐厅:这是加工费
- 舒淇为林心如庆47岁生日 姐妹俩托腮扮嫩状态似少女
- 英国版《鱿鱼游戏》真人游戏被曝玩法苛刻 或陷集体诉讼|热点在线
- 男孩逛景区遇现实版“鹈鹕灌顶” 有攻击性需小心
- 环球观天下!让人一言难尽的NS“新操作系统”《nOS》发售
- 《鬼谷八荒》官方纪念EA上线两周年:开发已进入尾声
- 像素风小清新ADV《东京故事》上架steam 年内发售
- 全球视讯!利雅得胜利提高对莫德里奇的报价:一年豪掷4500万欧
- UE5版《塞尔达传说:时之笛》新视频 展示牧场地图
- 世界速读:《终结者2》T-1000噩梦成真 科学家开发固液变形机器人
- 辽宁上空惊现“三个太阳”幻日奇观 专家揭秘
- 返程提醒:带上健康,注意这几个细节
- 当前聚焦:郭富城、梁朝伟主演《风再起时》宣布提档:2月5日元宵节上映
- 卡牌战斗新游《Spell Siege》公开 AI辅助开发时间6小时
- 【全球新要闻】托比·马奎尔愿意再次扮演蜘蛛侠:我怎么会不想呢?
- 天天最资讯丨《荣耀战魂》新英雄公布 异乡人阵营再添女将
- 发售1天Steam好评如潮 三上真司音游《Hi-Fi Rush》GOTY预定-天天快看点
- 世界头条:DC《雷霆沙赞2》新预告:少年大战“龙妈”卡丽熙