搭建环境见: SpringBoot整合Shiro 一:搭建环境

shiro配置类见: SpringBoot整合Shiro 二:Shiro配置类

shiro整合Mybatis见:SpringBoot整合Shiro 三:整合Mybatis

认证

未授权时

ShiroConfig中添加授权访问

  如果用户没有拥有 user:add 就无法访问add页面

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

  如果用户没有拥有 user:update 就无法访问 update 页面

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

  跳转到一个未授权的页面

    bean.setUnauthorizedUrl("/noauth");

@Bean(name = "shiroFilterFactoryBean")
public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("defaultWebSecurityManager")DefaultWebSecurityManager defaultWebSecurityManager){
ShiroFilterFactoryBean bean=new ShiroFilterFactoryBean();
bean.setSecurityManager(defaultWebSecurityManager);

Map<String ,String> filterMap = new LinkedHashMap<>();

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

filterMap.put("/user/*","authc");

bean.setFilterChainDefinitionMap(filterMap);

//未授权页面
bean.setUnauthorizedUrl("/noauth");

bean.setLoginUrl("/toLogin");

return bean;
}

Controller中添加未授权页面

  使用 @ResponseBody 直接显示字符串

@RequestMapping("/noauth")
@ResponseBody
public String unauthorized(){
return "未授权无法访问";
}

测试未授权的访问

  登录root用户,开始访问2个页面

  add

  update

授权

数据库添加权限字段

添加 perms(varchar)

对应实体类pojo
 使用了Lombok
package com.zy.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private String pwd; private String perms;

}

授权操作

UserRealm 中 AuthorizationInfo(授权)

  授权的对象 SimpleAuthorizationInfo

   SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

  添加权限的方法 addStringPermission

   info.addStringPermission("user:add");

  拿到当前登录的对象(认证成功之后,可以获取到)

    Subject subject = SecurityUtils.getSubject();

  获取到User

    User currentUser = (User) subject.getPrincipal();

  设置当前用户的权限

    info.addStringPermission(currentUser.getPerms());

 //授权

 @Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
System.out.println("执行了=>授权doGetAuthorizationInfo");

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addStringPermission("user:add");

//拿到当前登录的对象
Subject subject = SecurityUtils.getSubject();
//获取到User
User currentUser = (User) subject.getPrincipal();
//设置当前用户的权限
info.addStringPermission(currentUser.getPerms());

return info;
}

测试

root(初始没有权限)

  可以访问add页面了,因为被授权了

  update仍然不行,因为没有权限

张三(本身有add权限)

  可以访问add页面

  update不行

王五(本身有update)

  add

  update

 都可以访问了

SpringBoot整合Shiro 四:认证+授权的更多相关文章

  1. SpringBoot整合Shiro完成认证

    三.SpringBoot整合Shiro思路 首先从客户端发来的所有请求都经过Shiro过滤器,如果用户没有认证的都打回去进行认证,认证成功的,再判断是否具有访问某类资源(公有资源,私有资源)的权限,如 ...

  2. SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理|前后端分离(下)----筑基后期

    写在前面 在上一篇文章<SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期>当中,我们初步实现了SpringBoot整合Shiro ...

  3. springboot(十四):springboot整合shiro-登录认证和权限管理(转)

    springboot(十四):springboot整合shiro-登录认证和权限管理 .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...

  4. SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期

    写在前面 通过前几篇文章的学习,我们从大体上了解了shiro关于认证和授权方面的应用.在接下来的文章当中,我将通过一个demo,带领大家搭建一个SpringBoot整合Shiro的一个项目开发脚手架, ...

  5. SpringBoot 整合 Shiro 密码登录与邮件验证码登录(多 Realm 认证)

    导入依赖(pom.xml)  <!--整合Shiro安全框架--> <dependency> <groupId>org.apache.shiro</group ...

  6. 补习系列(6)- springboot 整合 shiro 一指禅

    目标 了解ApacheShiro是什么,能做什么: 通过QuickStart 代码领会 Shiro的关键概念: 能基于SpringBoot 整合Shiro 实现URL安全访问: 掌握基于注解的方法,以 ...

  7. spring-boot(八) springboot整合shiro-登录认证和权限管理

    学习文章:springboot(十四):springboot整合shiro-登录认证和权限管理 Apache Shiro What is Apache Shiro? Apache Shiro是一个功能 ...

  8. springboot整合Shiro功能案例

    Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...

  9. SpringBoot整合Shiro实现权限控制,验证码

    本文介绍 SpringBoot 整合 shiro,相对于 Spring Security 而言,shiro 更加简单,没有那么复杂. 目前我的需求是一个博客系统,有用户和管理员两种角色.一个用户可能有 ...

随机推荐

  1. 2021.9.13考试总结[NOIP模拟52]

    T1 路径 考虑每一位的贡献,第$i$位每$2^i$个数会变一次,那么答案为$\sum_{i=1}^{log_2n} \frac{n}{2^i}$. $code:$ 1 #include<bit ...

  2. 零基础学习Linux所必备的七大习惯

    对于很多Linux初学者来说,在刚开始使用linux系统时会感到很多的不适.这里为大家整理了自己以前linux入门时别人告诉我的七个习惯.我相信如果你运用了这七个习惯,在你使用Linux时你会感觉更安 ...

  3. Haar小波的理解

    1. 首先理解L^2(R)的概念 L^2(R) 是一个内积空间的概念,表示两个无限长的向量做内积,张成的空间问题.也就是两个函数分别作为一个向量,这两个函数要是平方可积的.L^2(a,b)=<f ...

  4. @RequestAttribute与@MatrixVariable

    @RequestAttribute 它只能使用在方法入参上,从request请求参数中获取对应的属性值. //路径跳转 @GetMapping("/goto") public St ...

  5. Mysql - date、datetime、timestamp 的区别

    date.datetime 的区别 顾名思义,date 日期,datetime 日期时间,所以 date 是 datetime 的日期部分 MySQL 以 YYYY-MM-DD hh:mm:ss 格式 ...

  6. JDK 之 HttpClient(jdk11)

    HttpClient 简介 java.net.http.HttpClient 是 jdk11 中正式启用的一个 http 工具类(其实早在 jdk9 的时候就已经存在了,只是处于孵化期),官方寓意为想 ...

  7. Redis入门和Java利用jedis操作redis

    Redis入门和Java利用jedis操作redis Redis介绍 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库. Redis 与其他 key - val ...

  8. 【JAVA】笔记(7)--- 数组精讲

    数组的静态初始化: 1.一维数组: int [ ] arr = { 1,2,3,4 } ; Object [ ] arr = {   new Object ( ) , new Object ( ) , ...

  9. 【JAVA】笔记(8)--- java.lang.String 精讲

    String 特性: 1.String 表示字符串类型,属于引用数据类型,所以其储存的是地址: 2.java 中规定,双引号括起来的字符串是不可变的,也就说" name "永远也只 ...

  10. 大爽Python入门教程 总目录

    作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 大爽Python入门公开课教案 本篇博客为公开课教案目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节, ...