SpringBoot学习笔记(六):SpringBoot实现Shiro登录控制和权限控制
登录模块:在登录时必须调用
授权模块:不是一登录就调动,而是当角色权限控制时才会调用
登录控制
环境搭建在上一篇。
数据库表
表名: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登录控制和权限控制的更多相关文章
- springboot学习笔记-5 springboot整合shiro
shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/ 它提供了很方便的权限认证和登录的功能. 而springboot作为一个开源框架,必然提供了和sh ...
- SpringBoot学习笔记(6) SpringBoot数据缓存Cache [Guava和Redis实现]
https://blog.csdn.net/a67474506/article/details/52608855 Spring定义了org.springframework.cache.CacheMan ...
- springboot学习笔记-6 springboot整合RabbitMQ
一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...
- springboot+mybatis+shiro——登录认证和权限控制
转载:https://z77z.oschina.io/ 一.引入依赖 shiro-all包含shiro所有的包.shiro-core是核心包.shiro-web是与web整合.shiro-spring ...
- 【转】SpringBoot学习笔记(7) SpringBoot整合Dubbo(使用yml配置)
http://blog.csdn.net/a67474506/article/details/61640548 Dubbo是什么东西我这里就不详细介绍了,自己可以去谷歌 SpringBoot整合Dub ...
- SpringBoot学习笔记(16)----SpringBoot整合Swagger2
Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...
- SpringBoot学习笔记(15)----SpringBoot使用Druid
直接访问Druid官网wiki,有详细教程,地址如下: SpringBoot支持Druid地址:https://github.com/alibaba/druid/tree/master/druid-s ...
- SpringBoot学习笔记(11)-----SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用
1. activemq 首先引入依赖 pom.xml文件 <dependency> <groupId>org.springframework.boot</groupId& ...
- SpringBoot学习笔记(10)-----SpringBoot中使用Redis/Mongodb和缓存Ehcache缓存和redis缓存
1. 使用Redis 在使用redis之前,首先要保证安装或有redis的服务器,接下就是引入redis依赖. pom.xml文件如下 <dependency> <groupId&g ...
- SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理
在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...
随机推荐
- 4-MySQL高级-事务-提交(3)
提交 为了演示效果,需要打开两个终端窗口,使用同一个数据库,操作同一张表 step1:连接 终端1:查询商品分类信息 select * from goods_cates; step2:增加数据 终端2 ...
- abstract类中method
一.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 都不可以,因为abstract申明的方法是要求子类去实现的,abstrac ...
- .net中的泛型全面解析
从2.0起我们一直就在谈论泛型,那么什么是泛型,泛型有什么好处,与泛型相关的概念又该怎么使用,比如泛型方法,泛型委托.这一篇我会全面的介绍泛型. 那么首先我们必须搞清楚什么是泛型,泛型其实也是一种类型 ...
- 【转】Windows(server2008)下使用VisualSVN Server搭建SVN服务器
参考文献 1.Windows下使用VisualSVN Server搭建SVN服务器(百度经验) 挺好就是没有配图已验证可用 2.在Windows Server 2008上部署SVN代码管理器 把第二 ...
- SQL SERVER 2008R2 执行大脚本文件时,提示“内存不足”的解决办法
我把一个数据库的架构及数据都已脚本的方式拷贝下来,再去新建一个数据库想把脚本执行一下,但提示如下错误: 问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是 ...
- jquery无缝向上滚动实现代
<!DOCTYPE html><html><head><style type="text/css">.renav{width:200 ...
- Django项目基础配置和基本使用
博文配置内容包括: django项目的创建 django项目下应用的创建及配置 数据库的配置 templates模板的配置 命令行创建项目: 在需要的目录下创建Django项目输入命令:django- ...
- Python_pymysql
pymysql安装:pip3 install pymysql 第一个实例:连接数据库进行用户验证 条件:数据库中已存在一个用户表,包含用户名.密码 import pymysql user = in ...
- linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <(转)
原文章地址:https://www.cnblogs.com/piperck/p/6219330.html >和>>: 他们俩其实唯一的区别就是>是重定向到一个文件,>&g ...
- [JZOJ6257] 【省选模拟8.9】修路
题目 题目大意 有一堆点,每个点都有其权值\(c_i\). 每次插入边\((u,v)\),\(u\)和\(1\)连通,\(v\)和\(1\)不连通.最后保证形成一棵树. 每次插入的时候询问\(1\)到 ...