一:springboot快速入门:

1.建立Maven项目,导入springboot父工程

<!-- 继承springboot默认父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>

2.导入web支持

<!-- 导入web场景支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.编写测试controller类

4.编写springboot启动类

@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

5.导入thymeleaf页面模块

1.引入thymeleaf依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2.建立test.html页面

在src/main/resource/创建templates目录,再创建test.html页面

再thymeleaf3.0以前对页面标签语法要求比较严格,开始标签必须有对应的结束标签

二:springboot与shiro整合

1.shiro核心api

subject:用户主体(把操作交给securityManager)
securityManager:安全管理器(关联realm)
reaml:shiro连接数据的桥梁

2.springboot整合shiro

2.1导如shiro与spring整合依赖

<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>

2.2自定义realm类,继承AuthorizingRealm

2.3编写shiro配置类

创建ShiroFilterFactoryBean

创建DefaultWebSecurityManager

创建Realm

3.使用shiro内置过滤器实现页面拦截

在ShiroFilterFactoryBean里添加shiro内置过滤器

shiro内置过滤器,可以实现权限相关的拦截器

//常用的过滤器:
//anon:无需认证(登陆)可以访问
//authc:必须认证才可以访问
//user:如果使用rememberMe的功能可以直接访问
//perms:该资源必须得到资源权限才可以访问
//role:该资源必须得到角色权限才可以访问
Map<String,String> filterMap = new LinkedHashMap<String,String>();
filterMap.put("/testThymeleaf", "anon"); //放行
filterMap.put("/*", "authc"); //拦截
//修改跳转到的登陆页面,默认是跳到login.jsp
shiroFilterFactoryBean.setLoginUrl("/tologin");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);

4.实现用户认证(登陆)操作

4.1编写登陆页面

4.2控制层中使用shiro编写认证操作

//获取subject
Subject subject = SecurityUtils.getSubject();
//封装用户数据
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
//执行登陆方法
subject.login(token);

4.3编写realm的判断逻辑

//1.判断用户名
UsernamePasswordToken token = (UsernamePasswordToken)arg0;
if(!token.getUsername().equals(username)) {
//用户名不存在
return null; //shiro底层会抛出UnknownAccountException
}
//2.判断密码
return new SimpleAuthenticationInfo("", password, "");

5.整合mybatis实现认证登陆

5.1导入mybatis相关依赖包

<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<!-- mysql数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!-- springboot的mybatis启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>

5.2配置application.properties

位置在:src/main/resources目录下:配置jdbc,连接池,扫描包

5.3编写User实体

5.4编写UserMapper接口

5.5编写UserMapper.xml映射文件

5.6编写业务接口和实现

接口/实现

5.7添加@MapperScan注解

//在spingboot启动程序类上加上:
@MapperScan("com.xtkj.mapper")

5.8修改UserRealm

User user = userService.findByAccount(token.getUsername());
if(null==user) {
//用户名不存在
return null; //shiro底层会抛出UnknownAccountException
}

三:springboot与shiro整合实现用户授权

1.使用shiro内置过滤器拦截资源(ShiroConfig)

	//授权过滤器(需要放在下面认证语句之前)
//当授权拦截后,shiro会自动跳转到未授权页面
filterMap.put("/add", "perms[user:add]");
filterMap.put("/update", "perms[user:update]");
//设置未授权页面
shiroFilterFactoryBean.setUnauthorizedUrl("/unauth");

2.完成shiro的资源授权(UserRealm)

	//给资源进行授权
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
//到数据库查询当前登陆用户的授权字符串
//获取当前登陆用户
Subject subject = SecurityUtils.getSubject();
User user = (User)subject.getPrincipal();
User dbuser = userService.findById(user.getId());
//根据角色来进行授权
info.addStringPermission(dbuser.getPerms());

四:thymeleaf和shiro标签整合使用

1.导入thymeleaf扩展坐标

<!-- thymeleaf对shiro的扩展坐标 -->
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>

2.配置shiroDialect

@Bean
public ShiroDialect getShiroDialect() {
return new ShiroDialect();
}

3.在html页面上使用shiro标签

<div shiro:hasPermission="user:add">
进入用户添加页面:<a th:href="@{/add}">用户添加</a><br>
</div>
<div shiro:hasPermission="user:update">
进入用户修改页面:<a th:href="@{/update}">用户修改</a><br>
</div>

一:Shiro知识整理的更多相关文章

  1. js事件(Event)知识整理

    事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下   鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...

  2. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  3. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  4. wifi基础知识整理

    转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...

  5. 数据库知识整理<一>

    关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数 ...

  6. 【转载】UML类图知识整理

    原文:UML类图知识整理 UML类图 UML,进阶必备专业技能,看不懂UML就会看不懂那些优秀的资料. 这里简单整理 类之间的关系 泛化关系(generalization) 泛化(generalize ...

  7. Linux进程管理知识整理

    Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...

  8. js事件(Event)知识整理[转]

    事件注册 平常我们绑定事件的时候用dom.onxxxx=function(){}的形式 这种方式是给元素的onxxxx属性赋值,只能绑定有一个处理句柄. 但很多时候我们需要绑定多个处理句柄到一个事件上 ...

  9. Spring Ioc知识整理

    Ioc知识整理(一): IoC (Inversion of Control) 控制反转. 1.bean的别名 我们每个bean元素都有一个id属性,用于唯一标识实例化的一个类,其实name属性也可用来 ...

随机推荐

  1. 201621123012《Java程序设计》第10次学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...

  2. “全栈2019”Java第三十一章:二维数组和多维数组详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. jquery事件一 ---鼠标移入移出

    比较一下几个jquery事件的区别 mouseover() 鼠标进入(进入子元素也触发) mouseout() 鼠标离开(离开子元素也触发) mouseenter() 鼠标进入(进入子元素不触发) m ...

  4. PHP类库生成pdf代码实例

    require_once('./tcpdf/tcpdf.php'); //引入库文件        $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', f ...

  5. C#中简单操作Mysql数据库

    以C#访问MySQL数据库,执行简单的CRUD. MySql.Data.dll是C#操作MySQL的驱动文件,是C#连接MySQL必要插件,使C#语言更简洁的操作MySQL数据库.可以用NuGet命令 ...

  6. Flutter Navigator 跳转

    1,routes 静注册,使用 跳转 Navigator.pushNamed(context, "/main"); 2,静态跳转及销毁当前页面使用 Navigator.pushNa ...

  7. /data/tomcat8/bin/setenv.sh

    --问题 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was remove ...

  8. SD341X-SD343H蜗轮传动伸缩蝶阀厂家,SD341X-SD343H蜗轮传动伸缩蝶阀价格 - 专题栏目 - 无极资讯网

    无极资讯网 首页 最新资讯 最新图集 最新标签   搜索 SD341X-SD343H蜗轮传动伸缩蝶阀 无极资讯网精心为您挑选了(SD341X-SD343H蜗轮传动伸缩蝶阀)信息,其中包含了(SD341 ...

  9. Centos6.5上安装sonarqube6.7.6

    Centos6.5已经装备好,可以联网 sonarqube6.7.6下载地址:https://www.sonarqube.org/downloads/ 步骤: 安装MySQL5.7 MySQL详细的安 ...

  10. Unity中利用委托与监听解耦合的思路

    这篇随笔是一篇记录性的随笔,记录了从http://www.sikiedu.com/my/course/304,这门课程中学到的内容,附带了一些自己的思考. 一.单例模式的应用 首先假想一种情况,现在需 ...