Shiro快速入门之二

一、前言

Shiro快速入门之一 介绍了Shiro三大核心组件,四大核心功能,以及一个简单的Test Demo,接下来两篇我会用一个比较完整的例子来讲述Shiro的认证及授权是怎么做的,本篇侧重于介绍认证的过程

二、Shiro认证例子

1、例子概述

  • 使用SpringBoot+ThymeLeaf+Jpa搭建的例子

  • ThymeLeaf 是一个和Velocity差不多的模板引擎,如果不是前后端分离的项目,页面可以用SpringBoot官方推荐的ThymeLeaf模板,使用ThymeLeaf还可以解决发送HTML邮件内容拼接的问题,具体可看 从一坨代码说起。

  • Jpa是Java Persistence API,它需要Provider来提供实现,Hibernate是JPA Provider 最强一个实现。 注:后续会整理一篇介绍一下tk-mybatis、mybatis、jpa的区别。

2、pom.xml

用spring.io快速创建springboot project,然后加入依赖

  • spring-boot-starter-web

  • spring-boot-starter-thymeleaf

  • spring-boot-starter-data-jpa

  • mysql-connector-java

  • shiro-spring

3、application.properties

Shiro快速入门之二_第1张图片

配置数据库连接和ThymeLeaf

spring.jpa.properties.hibernate.hbm2ddl.auto=update

注:该行设置为update,加载时会根据model类自动建立表结构,用jpa做demo这点还是很方便的,不用自己创建表结构。

对于配置文件spring.jpa.properties.hibernate.dialect,要写一个MySQLConfig来设置字符集。

Shiro快速入门之二_第2张图片

4、实体类

权限类

Shiro快速入门之二_第3张图片

角色类

Shiro快速入门之二_第4张图片

用户类

Shiro快速入门之二_第5张图片

注:创建三个实体类 权限类、角色类、用户类,并设置好关联关系,权限与角色多对多,角色与用户多对多,这样在应用启动后会自动创建5张表。

permission、role、role_permission、user、user_role,但数据库还是需要先创建好的,表是会自动创建。

初始化一条数据到用户表,用于测试。

Shiro快速入门之二_第6张图片

5、UserService、Dao类

Shiro快速入门之二_第7张图片

6、MyShiroRealm

自定义的Realm实现,主要实现两个方法一个是认证,一个是授权

Shiro快速入门之二_第8张图片

上面这段就是认证(登录)的代码,先获取用户登录输入的账号(注:登录的代码subject.login(token);会调用该方法),然后到数据库中根据用户名获取用户对象信息,再用从数据库获取的信息(密码,salt)来构造SimpleAuthenticationInfo对象。

注:授权代码下篇再讲

7、ShiroConfig

Shiro快速入门之二_第9张图片

注:配置Shiro过滤器,哪些地址不拦截,哪些地址要拦截,需要注意顺序,以及登录页地址,成功或失败后跳转页面地址。

Shiro快速入门之二_第10张图片

注:将自定义的MyShiroRealm设置到SecurityManager中。

8、UserController

Shiro快速入门之二_第11张图片

登录认证Controller,调用subject.login(token)进行认证,成功或失败后跳到对应的页面。

login.html

Shiro快速入门之二_第12张图片

index.html

三、总结

用Shiro写认证代码,第一步要先实现Realm的认证方法,将从数据库查出来的密码,salt设置到AuthenticationInfo对象中,在用户登录时会将输入的用户名密码传给SecurityManger,然后进行比对用户名和密码是否正确。

核心代码,判断realm对象是否支持用户的token。

你可能感兴趣的:(Java技术,java)