SpringBoot整合Shiro权限管理
Shiro(Java安全框架)
什么是权限管理
权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。
1.什么是Shiro
Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。
1.三个核心组件:Subject, SecurityManager 和 Realms.
Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。
Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。
Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
2.Shiro四大核心功能:Authentication,Authorization,Cryptography,Session Management
3.用户名密码认证流程
4.授权流程
先创建一个SpringBoot项目,添加shiro的相关依赖
<!--添加 shiro 依赖-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>
修改配置文件application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/project?serverTimezone=UTC
username: root
password: 123456
thymeleaf:
cache: false
encoding: utf-8
prefix: classpath:/templates/
mybatis:
mapper-locations: classpath:/mapper/*.xml
type-aliases-package: com.shiro.login.domain
实体类
用户
@Data
public class User {
private String id;
private String name;
private String password;
}
角色
@Data
public class Role {
private String id;
private String name;
}
权限
@Data
public class Permission {
private String id;
private String name;
private String url;
}
Mapper.xml和Service层就不贴了
ShiroConfiguration
package com.shiro.login.config;
import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.LinkedHashMap;
/**
* @Author: Adorez
* @Date: 2019/11/27 18:00
* @Description:
*/
@Configuration
public class ShiroConfiguration {
@Bean("userRealm")
public UserRealm userRealm(){
UserRealm userRealm=