博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot和shiro整合项目实战五 最后一章(图解超详细)
阅读量:3897 次
发布时间:2019-05-23

本文共 3325 字,大约阅读时间需要 11 分钟。

承接上一篇博客:

这是下一篇博客:
首先要说的是,这个项目实战是参考自黑马,可以去对应视频看一看:
在这里插入图片描述
最后一篇主要的是实现shiro整合用户授权
首先在shiroConfig这边进行小小的改动
在filterMap这边加入这个

filterMap.put("/add","perms[user:add]");

这边需要先用正确的账号密码登录

在这里插入图片描述
也就是未授权的错误

然后继续修改

shiroConfig

package com.example.shiro;import org.apache.shiro.spring.web.ShiroFilterFactoryBean;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;@Configurationpublic class ShiroConfig {
/** * 创建Realm bean会让方法返回的对象放入到spring的环境,以便使用 */ @Bean(name = "userRealm") public UserRealm getRealm(){
return new UserRealm(); } /** * 创建DefaultWebSecurityManager */ //这里的传参有点特殊可以调用一个注解,这里有个细节,想看看注解区不区分大小写 //实测,会报错。。。所以是区分大小写的 // @Qualifier 注释指定注入 Bean 的名称,是用来消除歧义的 //这里也要有Bean @Bean(name = "defaultWebSecurityManager") public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
DefaultWebSecurityManager defaultWebSecurityManager=new DefaultWebSecurityManager(); //关联realm,并且这个是需要传参的 defaultWebSecurityManager.setRealm(userRealm); return defaultWebSecurityManager; //感觉和直接return一个 new的一样吧 之所以不直接return是因为,会调用一个 //关联realm的方法 } /** * 创建shiroFilterFactoryBean */ //也是需要注解和参数的 //这里也是需要bean注解的 @Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("defaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
ShiroFilterFactoryBean shiroFilterFactoryBean=new ShiroFilterFactoryBean(); //设置一个安全管理器来关联SecurityManager shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager); //添加shiro内置过滤器 //先创建一个Map集合 Map
filterMap=new LinkedHashMap
(); //然后往里面添加东西 filterMap.put("/add","authc"); filterMap.put("/update","authc"); //也可以改成这样 但是是因为选择了templates下的所有,但是testThymeleaf 是不需要的,所有是需要将testThymeleaf改成anno /* filterMap.put("/testThymeleaf","anon"); filterMap.put("/*","authc");*/ //授权过滤器 这边使用的是perms,也就是该资源必须得到资源授权才可以访问 //所以当未授权的时候shiro就会自动跳转到一个未授权的页面 filterMap.put("/add","perms[user:add]"); /** * 修改调整的登录页面 */ //然后这个跳转的页面,就是需要control来进行自动装入这个页面 shiroFilterFactoryBean.setLoginUrl("/login"); //所以要设置未授权的页面 shiroFilterFactoryBean.setUnauthorizedUrl("/unAuth"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap); return shiroFilterFactoryBean; }}

在controller加入授权页面

//这里增加一个授权页面    @RequestMapping("/unAuth")    public String unAuth(){
System.out.println("UserController.unAuth()"); //同理返回路径 return "unAuth"; }

并在templates下新建一个

unAuth.html文件

    
未授权提示页面你未授权

运行结果如下

在这里插入图片描述
修改一下UserRealm就行

@Override    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
System.out.println("执行授权逻辑"); //再访问了之后就可以进行修改 //给资源进行授权 SimpleAuthorizationInfo info=new SimpleAuthorizationInfo(); //添加资源的授权字符串,要和授权那边的字符串一致 info.addStringPermission("user:add"); return info; }

这样子运行就没问题了

在这里插入图片描述

转载地址:http://msfen.baihongyu.com/

你可能感兴趣的文章
什么时候要用虚析构函数?
查看>>
序列化、反序列化与jsoncpp学习
查看>>
同步/异步与阻塞非阻塞的关系
查看>>
epoll模型讲解/源码分析
查看>>
ELF格式与bss段
查看>>
java继承 long和float小记点
查看>>
记录几点在开发中遇到的问题 2015-7-28 (会更新)
查看>>
网银在线的异步操作代码示意图
查看>>
火狐Firefox浏览器安装Selenium_IDE的步骤以及其使用规则
查看>>
记录运行代码的时间长短
查看>>
关于yii2的一些知识的学习笔述
查看>>
用纯php实现MVC框架,文件目录模仿yii2
查看>>
新开发的体重管理项目----用纯php模仿yii2框架建立的
查看>>
JavaScript面向对象编程指南 的笔记
查看>>
在 2016 年做 PHP 开发是一种什么样的体验?(一)
查看>>
PHP获取客户端的IP
查看>>
从头开始学习yii2---1.搭建yii2开发环境
查看>>
从头开始学习yii2---3.语言包的配置
查看>>
yii2-表单验证的一些规则
查看>>
索引相关问题
查看>>