登录模块:在登录时必须调用

授权模块:不是一登录就调动,而是当角色权限控制时才会调用

登录控制

环境搭建在上一篇。

数据库表

表名:role 字段:id rolename

表名:user 字段:id username sex roleid

在代码中简历数据库表对应的实体类

code

userController.java

//添加如下方法
@RequestMaping("/loginAction")
public String loginAction(String name,String password){
Subject subject = SecurityUtiles.getSubject();
 MD5Hash md5Hash= new Md5Hash(password,"123").toString();
AuthenticationTocken tocken = new UsernamePasswordTocken(username,password);
		try{
		//如果执行subject.login(tocken);没有抛出异常,则证明登陆成功。
		//走到这里会进入下一个类
			subject.login(tocken);
				return "login Success"
		}catch(Exception e){
		//如果执行subject.login(tocken);抛出异常,则证明登陆失败。
			return "login Failed"
		}
		return "loginPage";
}

UserRealm.java

//控制登录
@Overrride
protected AuthenticationInfi doGEtAuthenticationInfo(AuthenticationTocken at)throws AuthenticationException{
		AuthenticationInfo info;
		String usersname = (String)at.getPrincipal;//从tocken里面得到username
		User user = userService.selectuserByUsername(username);
		if(user!=null){
		info = new SimpleAuthenticationInfo(username,user.getPassword(),"xxxxx");
		//执行到这里会自动和调用这个类的上面那个类里面的username和password
		进行比较
		return info;
		}
		return null;
}

权限控制

数据库

表名: permission (权限表)字段: id pername roleid

表名 :role(角色表)字段 :id rolename

表名:user 字段:id username sex roleid

在代码中简历数据库表对应的实体类

code

UserRealm.java

@Overrride
protected AuthenticationInfi doGEtAuthenticationInfo(AuthenticationTocken at)throws AuthenticationException{
		SimpleAuthenticationInfo info = new SimpleAuthenticationInfo();
		String usersname = (String)at.getPriMaryPrincipal;//从tocken里面得到username
		//将当前用户的角色和权限复制进来
		User user = userService.selectuserByUsername(username);
		Integer roleid = user.getRoleid();
		Role role = roleMapper.selectById(roleid);

		info.addRole(role.getRolename());

		Wrapper<Permission> wrapper = new EntityWrapper<>();
		wrapper.eq("roleid",role.getId(0);
		List<Permission> selectList = perMapper.seletList(wrapper);
		List<String> perlist = new ArrayList<>();
		selectList.forEach(per -> {
			perlist.add(per.getRolename());
		}
		)
		infoi.addStringPermissions(perlist);

		return info;
}

UserController.java

@RequiresRoles("admin")//当用户是这个的时候才能执行下面的方法
@RequestMapping("/getuser")
public Object getUser(Integer id){
	return userMapper.selectById(id);
}
@RequiresPermissions("sys:delete")//只有有这个权限的时候才能执行下面的方法
@RequestMapping("/deleteuser")
public Object deleteuser(Integer id){
	return userMapper.deleteById(id);
}

SpringBoot学习笔记(六):SpringBoot实现Shiro登录控制和权限控制的更多相关文章

  1. springboot学习笔记-5 springboot整合shiro

    shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/  它提供了很方便的权限认证和登录的功能. 而springboot作为一个开源框架,必然提供了和sh ...

  2. SpringBoot学习笔记(6) SpringBoot数据缓存Cache [Guava和Redis实现]

    https://blog.csdn.net/a67474506/article/details/52608855 Spring定义了org.springframework.cache.CacheMan ...

  3. springboot学习笔记-6 springboot整合RabbitMQ

    一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...

  4. springboot+mybatis+shiro——登录认证和权限控制

    转载:https://z77z.oschina.io/ 一.引入依赖 shiro-all包含shiro所有的包.shiro-core是核心包.shiro-web是与web整合.shiro-spring ...

  5. 【转】SpringBoot学习笔记(7) SpringBoot整合Dubbo(使用yml配置)

    http://blog.csdn.net/a67474506/article/details/61640548 Dubbo是什么东西我这里就不详细介绍了,自己可以去谷歌 SpringBoot整合Dub ...

  6. SpringBoot学习笔记(16)----SpringBoot整合Swagger2

    Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...

  7. SpringBoot学习笔记(15)----SpringBoot使用Druid

    直接访问Druid官网wiki,有详细教程,地址如下: SpringBoot支持Druid地址:https://github.com/alibaba/druid/tree/master/druid-s ...

  8. SpringBoot学习笔记(11)-----SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用

    1. activemq 首先引入依赖 pom.xml文件 <dependency> <groupId>org.springframework.boot</groupId& ...

  9. SpringBoot学习笔记(10)-----SpringBoot中使用Redis/Mongodb和缓存Ehcache缓存和redis缓存

    1. 使用Redis 在使用redis之前,首先要保证安装或有redis的服务器,接下就是引入redis依赖. pom.xml文件如下 <dependency> <groupId&g ...

  10. SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

    在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...

随机推荐

  1. MySQL数据库之DQL(数据查询语言)

    1.MySQL之DQL查询AS CONCAT LIKE的使用 (1)select 列名1,列名2,...... from 表名 [where 条件] 查询所有字段用*,不带where条件的话,就会把表 ...

  2. 【笔记篇】斜率优化dp(四) ZJOI2007仓库建设

    传送门戳这里>>> \(n\leq1e6\), 显然还是\(O(n)\)的做法. 这个题有个条件是只能运往编号更大的工厂的仓库, 这也是写出朴素dp的方程的条件. 我们令\(f[i] ...

  3. elast数据存放

    这几天一直在索引数据,突然发现服务器状态变红色了,去官网看了下 集群状态如果是红色的话表示有数据已经丢失了!这下头大了才索引了7G数据,后面还有10多个G, 我在liunx下看了下磁盘空间 发现运行e ...

  4. 帆软报表PC端实施报表心得体会

    1.报表制作完成后,预览时自动显示查询内容,在控件处设置: 2.求一列数据的最小值(除去0),并对最小值字体加粗标绿,需要对对应单元格设置条件属性,并插入公式:C6 = min(greparray(C ...

  5. redis和ehcache的区别,存储方式(各属于内存还是外存)

    ehcache属于内存存储,redis的缓存属于内存存储,redis的持久文件属于外存存储: redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方 ...

  6. 弹性网卡支持私网多IP

    摘要: 弹性网卡支持多IP功能可以最多在一块弹性网卡配置20个私网IP地址,特别适用于于以下场景. 1.单个服务器上托管多个应用,提升实例利用率,每个应用对外暴露一个独立的服务IP地址. 2.当实例发 ...

  7. JavaScript中的文档对象模型

    1. DOM基本介绍1 什么是DOMDOM的英语全称为Document Object Model,翻译成中文就 是文档对象模型.也就是说,将整个文档看作是一个对象.而一个文档又是由很多节点组成的, 那 ...

  8. django中写form表单时csrf_token的作用

    之前在学习django的时候,在template中写form时,出现错误.百度,google后要加{% csrf_token %}才可以,之前一直也没研究,只是知道要加个这个东西,具体是什么也不明白. ...

  9. Docker系列(五):Docker网络机制(上)

    Linux路由机制打通网络 路由机制是效率最好的 docker128上修改Docker0的网络地址,与docker130不冲突 vi /usr/lib/systemd/system/docker.se ...

  10. nodejs与websocket模拟简单的聊天室

    nodejs与websocket模拟简单的聊天室 server.js const http = require('http') const fs = require('fs') var userip ...